SQL中如何截断Timestamp至分钟后再加一分钟?
解决Timestamp截断至分钟后加一分钟的问题
核心逻辑是先把Timestamp截断到分钟级别(清零秒数),再执行你已有的加一分钟操作,以下是不同SQL方言的实现方式:
PostgreSQL/Redshift/雪花SQL
用DATE_TRUNC函数直接截断到分钟,完整语句:
DATEADD(MINUTE, 1, DATE_TRUNC('minute', order.term_end::TIMESTAMP)) AS "TermEnd"
DATE_TRUNC('minute', ...)会把时间的秒、毫秒部分全部清零,比如将3001-01-01T07:59:59Z转为3001-01-01T07:59:00Z,再加一分钟就得到目标时间。
SQL Server
通用写法(兼容全版本)
通过DATEDIFF计算从0时刻到当前时间的分钟数,再转回Timestamp实现截断:
DATEADD(MINUTE, 1, DATEADD(MINUTE, DATEDIFF(MINUTE, 0, order.term_end::TIMESTAMP), 0)) AS "TermEnd"
SQL Server 2022+简化写法
支持DATE_TRUNC函数,写法和PostgreSQL一致:
DATEADD(MINUTE, 1, DATE_TRUNC('minute', order.term_end::TIMESTAMP)) AS "TermEnd"
MySQL
MySQL 8.0+版本
用TRUNCATE函数直接截断到分钟:
DATE_ADD(TRUNCATE(order.term_end, MINUTE), INTERVAL 1 MINUTE) AS `TermEnd`
兼容低版本写法
用DATE_FORMAT格式化时间清零秒数,再转回Timestamp后加一分钟:
DATE_ADD(STR_TO_DATE(DATE_FORMAT(order.term_end, '%Y-%m-%d %H:%i:00'), '%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE) AS `TermEnd`
以上写法均可实现:不管输入是3001-01-01T07:59:00Z还是3001-01-01T07:59:59Z,最终都会得到3001-01-01T08:00:00Z。
内容的提问来源于stack exchange,提问作者suzy
相关产品推荐
相关产品推荐

