如何在SQL中为datetime类型列调整时分秒数值?
不同数据库实现UpdatedTime时分秒调整为23:59:59的方案
以下所有方案均支持查询验证和直接更新表数据,执行UPDATE前建议先运行对应SELECT语句确认结果符合预期。
MySQL 实现
- 日期拼接方案
-- 查询验证 SELECT CONCAT(DATE(UpdatedTime), ' 23:59:59') AS UpdatedTime FROM 你的表名; -- 执行更新 UPDATE 你的表名 SET UpdatedTime = CONCAT(DATE(UpdatedTime), ' 23:59:59');
- 时间偏移方案
-- 86399秒 = 23小时59分59秒,直接加在当天0点上 SELECT DATE(UpdatedTime) + INTERVAL 86399 SECOND AS UpdatedTime FROM 你的表名;
SQL Server 实现
-- 查询验证 SELECT DATEADD(SECOND, 86399, CAST(UpdatedTime AS DATE)) AS UpdatedTime FROM 你的表名; -- 执行更新 UPDATE 你的表名 SET UpdatedTime = DATEADD(SECOND, 86399, CAST(UpdatedTime AS DATE));
Oracle 实现
-- 查询验证 SELECT TRUNC(UpdatedTime) + 86399/86400 AS UpdatedTime FROM 你的表名; -- 执行更新 UPDATE 你的表名 SET UpdatedTime = TRUNC(UpdatedTime) + INTERVAL '23:59:59' HOUR TO SECOND;
说明:Oracle中1代表完整的1天,86399/86400就是一天中的第86399秒,对应23:59:59。
PostgreSQL 实现
-- 查询验证 SELECT DATE_TRUNC('day', UpdatedTime) + INTERVAL '23:59:59' AS UpdatedTime FROM 你的表名; -- 执行更新 UPDATE 你的表名 SET UpdatedTime = DATE_TRUNC('day', UpdatedTime) + INTERVAL '86399 seconds';
注意事项
- 如果字段需要保留毫秒精度,可将偏移量调整为86399.999秒,即可得到
23:59:59.999的结果 - 若存储的是带时区的时间类型,需先统一时区再做截断处理,避免出现日期偏移
内容的提问来源于stack exchange,提问作者Wymo Oo
相关产品推荐
相关产品推荐

