ORACLE如何将带毫秒的timestamp(9)转换为无毫秒的日期类型
timestamp(9)字段截断毫秒保留日期类型实现方案
不同主流数据库的实现语法如下,所有方案均返回原生日期时间类型,不会转为字符串:
- Oracle
使用TRUNC函数指定精度到秒即可:
SELECT TRUNC(DATETIME_UTC, 'SS') AS DATETIME_UTC_NO_MS FROM 你的表名;
- MySQL
MySQL 8.0.28及以上版本可直接用DATE_TRUNC函数:
SELECT DATE_TRUNC('second', DATETIME_UTC) AS DATETIME_UTC_NO_MS FROM 你的表名;
低版本兼容写法:
SELECT CONVERT(DATETIME_UTC, DATETIME) AS DATETIME_UTC_NO_MS FROM 你的表名;
- PostgreSQL
使用DATE_TRUNC函数指定秒级精度:
SELECT DATE_TRUNC('second', DATETIME_UTC) AS DATETIME_UTC_NO_MS FROM 你的表名;
- SQL Server
通过DATEADD+DATEDIFF实现毫秒截断:
SELECT DATEADD(second, DATEDIFF(second, 0, DATETIME_UTC), 0) AS DATETIME_UTC_NO_MS FROM 你的表名;
以上写法只会截断毫秒/微秒部分,不会修改日期时间的其他取值。如果需要输出为2/3/2019 1:27:00 AM格式的字符串展示,可额外搭配对应数据库的日期格式化函数,转换后的数据类型为字符串,不再是原生日期类型。
内容的提问来源于stack exchange,提问作者Webb
相关产品推荐
相关产品推荐

