sql - 在不丢失格式的情况下更新日期时间字段的日期
问题描述
我有一个包含两列的表:(M_OP_DATE
类型DATE
)和M__DT_UTC_DATE
(类型TIMESTAMP(3)
)。该表包含以下数据:
+---------------------+---------------------+
| M_OP_DATE | M__DT_UTC_DATE |
+---------------------+---------------------+
| 2018-09-03 00:00:00 | 2018-09-25 20:14:57 |
| 2018-08-31 00:00:00 | 2018-09-25 20:15:05 |
| 2018-08-31 00:00:00 | 2018-09-25 20:15:05 |
+---------------------+---------------------+
我想M_OP_DATE
在字段中复制日期,而不触及时间M__DT_UTC_DATE
。
我在 SO 上进行了搜索,发现这个答案看起来几乎是我需要做的:已经回答的问题。
因此,我根据我的数据调整了这个答案,并提出了如下内容:
update FXKAUD_H_DBF set M__DT_UTC_DATE = to_date(substr(M_OP_DATE, 0, 9) || ' ' || to_char(M__DT_UTC_DATE, 'HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')
然而,结果却出乎意料:
+---------------------+---------------------+
| M_OP_DATE | M__DT_UTC_DATE |
+---------------------+---------------------+
| 2018-08-29 00:00:00 | 2029-08-18 14:47:07 |
+---------------------+---------------------+
如您所见,年为2029
,日为18
。它基本上将当天的两位数字与年份的最后两位数字交换。
当我尝试只选择里面的内容substr(M_OP_DATE, 0, 9)
时,我可以看到它向我显示的结果与我通过简单的选择在表格中看到的结果不同:
select substr(M_OP_DATE, 0, 9) from FXKAUD_H_DBF
+-----------------------+
| SUBSTR(M_OP_DATE,0,9) |
+-----------------------+
| 29-AUG-18 |
+-----------------------+
...当我尝试将这个字符串格式化为日期时YYYY-MM-DD
,问题就出现了:
select to_date(substr(M_OP_DATE, 0, 9), 'YYYY-MM-DD') from FXKAUD_H_DBF
| TO_DATE(SUBSTR(M_OP_DATE,0,9),'YYYY-MM-DD') |
+---------------------------------------------+
| 0029-08-18 00:00:00 |
+---------------------------------------------+
任何人都可以指导我完成好方法吗?很抱歉没有提供 SQLfiddle,但该网站对我来说已关闭(我稍后会检查是否可以将其添加到问题中)。
解决方案
一种方法是:
select M_OP_DATE + (M__DT_UTC_DATE - trunc(M__DT_UTC_DATE))
或者:
select M__DT_UTC_DATE - (trunc(M__DT_UTC_DATE) - M_OP_DATE
查询将是:
update FXKAUD_H_DBF set M__DT_UTC_DATE = M__DT_UTC_DATE - (trunc(M__DT_UTC_DATE) - M_OP_DATE)
推荐阅读
- java - Java 扫描仪故障
- json - 使用 jq 根据来自 JSON 文件的参数值调用 AWS CLI
- javascript - 我正在尝试为三个单独的选项卡运行 onEdit 函数,但收到 TypeError: Cannot read property 'value' of undefined
- node.js - res.json 不起作用并默认为上次使用的 res.send,即使此代码不再存在
- laravel - foreach 和 sleep 函数广播
- jquery - 基于发布值的 Imagemapster 高亮显示
- vue.js - 为什么 Vue 的 v-model 会在 click 事件触发后更晚更新数据?
- python - 循环遍历树以创建字典_NLTK
- excel - VBA:从另一个列表中查找元素时出现类型不匹配错误
- android - 有没有办法查看 Flutter 应用发布版本中占用了多少空间?