如何在SQL查询中将now()替换为当前日期加自定义时间
实现方案
核心逻辑分两种场景处理:
- 动态取当天日期+自定义固定时间:提取当前无时间的日期字段,拼接自定义的固定时间,替换原SQL中的
now()即可 - 固定指定日期+自定义时间:直接写标准格式的时间字符串替换
now()即可,比如示例的2021年7月28日上午8点直接写为'2021-07-28 08:00:00'
不同数据库的动态日期+自定义时间实现语法如下:
- MySQL:两种常用写法
- 直接拼接字符串:
CONCAT(CURDATE(), ' 08:00:00') - 时间间隔叠加:
DATE_ADD(CURDATE(), INTERVAL 8 HOUR)
- 直接拼接字符串:
- PostgreSQL:
CURRENT_DATE + INTERVAL '8 hours' - Oracle:
TRUNC(SYSDATE) + INTERVAL '8' HOUR - SQL Server:
DATEADD(HOUR, 8, CAST(GETDATE() AS DATE))
原SQL修改示例(以MySQL为例,动态取当天上午8点替换now())
(select count(*) from students where exams.id=students.exam_id and students.exam_id=exams.id and end_time <> ''and bb_user_id is not null and test_status<>1 and review_end is null and (exam_end + interval 2 day) > DATE_ADD(CURDATE(), INTERVAL 8 HOUR) and exam_end < DATE_ADD(CURDATE(), INTERVAL 8 HOUR)) as current
如需调整自定义时间,修改对应参数即可,比如要设置为当天17点30分,MySQL下可直接写为
CONCAT(CURDATE(), ' 17:30:00')
内容的提问来源于stack exchange,提问作者Vorcikle
相关产品推荐
相关产品推荐

