PostgreSQL中如何让CURRENT_TIMESTAMP仅保留当前日期并固定时间为22:00?
实现当前日期固定22:00的时间戳插入方案
不同数据库的实现方式略有差异,以下是主流数据库的可行方案,解决你之前DATEADD方法失效的问题:
MySQL/MariaDB
两种简洁写法任选:
- 拼接日期与固定时间后转datetime:
INSERT INTO your_table (your_datetime_column) VALUES (STR_TO_DATE(CONCAT(DATE(CURRENT_TIMESTAMP), ' 22:00:00'), '%Y-%m-%d %H:%i:%s'));
- 用TIMESTAMP函数直接组合日期和时间:
INSERT INTO your_table (your_datetime_column) VALUES (TIMESTAMP(CURDATE(), '22:00:00'));
SQL Server
核心是先把当前时间截断为仅日期部分(0点整),再添加22小时:
INSERT INTO your_table (your_datetime_column) VALUES (DATEADD(HOUR, 22, CAST(GETDATE() AS DATE)));
你之前的方法失效,大概率是没把CURRENT_TIMESTAMP/GETDATE()转换为DATE类型,导致原时间的时分秒被保留,加22小时后无法得到固定的22:00。
PostgreSQL
直接给当前日期加上22小时间隔:
INSERT INTO your_table (your_datetime_column) VALUES (CURRENT_DATE + INTERVAL '22 hours');
或者用字符串拼接转换:
INSERT INTO your_table (your_datetime_column) VALUES ((CURRENT_DATE || ' 22:00:00')::timestamp);
Oracle
截断当前日期到0点后,加上22/24天(等价于22小时):
INSERT INTO your_table (your_datetime_column) VALUES (TRUNC(SYSDATE) + 22/24);
内容的提问来源于stack exchange,提问作者T_MAC_1
相关产品推荐
相关产品推荐

