如何将CREATED_DATE_TIME的时间戳复制到DUE_DATE_TIME列(保留原日期)
替换DUE_DATE_TIME的时间部分为CREATED_DATE_TIME的时间
需求说明:更新MY_TABLE中所有记录的DUE_DATE_TIME字段,保留该字段原有的日期部分,将时间部分替换为CREATED_DATE_TIME字段的时间部分。
不同数据库的实现语句
以下是主流数据库对应的更新SQL:
MySQL/MariaDB
通过DATE()提取DUE_DATE_TIME的日期部分,TIME()提取CREATED_DATE_TIME的时间部分,再拼接成新的日期时间值:
UPDATE MY_TABLE SET DUE_DATE_TIME = CONCAT(DATE(DUE_DATE_TIME), ' ', TIME(CREATED_DATE_TIME));
SQL Server
利用DATEADD和DATEDIFF组合,保留DUE_DATE_TIME的日期基准,加上CREATED_DATE_TIME的时间部分:
UPDATE MY_TABLE SET DUE_DATE_TIME = DATEADD(day, DATEDIFF(day, 0, DUE_DATE_TIME), CAST(CREATED_DATE_TIME AS TIME));
Oracle
通过TRUNC()获取DUE_DATE_TIME的纯日期,再加上CREATED_DATE_TIME的时间偏移量:
UPDATE MY_TABLE SET DUE_DATE_TIME = TRUNC(DUE_DATE_TIME) + (CAST(CREATED_DATE_TIME AS TIMESTAMP) - TRUNC(CAST(CREATED_DATE_TIME AS TIMESTAMP)));
验证建议
执行更新前,先通过SELECT语句验证结果是否符合预期,以MySQL为例:
SELECT ID, CREATED_DATE_TIME, DUE_DATE_TIME, CONCAT(DATE(DUE_DATE_TIME), ' ', TIME(CREATED_DATE_TIME)) AS updated_due_date FROM MY_TABLE;
注意:如果日期字段是字符串类型,需要先转换为日期时间类型再进行处理,避免格式错误。
内容的提问来源于stack exchange,提问作者Dibyajyoti Behera
相关产品推荐
相关产品推荐

