MySQL获取含当前小时的无分秒日期的SQL查询语句报错求助
问题分析与解决方案
哦,我知道你卡在哪了!你的问题出在直接拼接日期、数字和字符串的方式错误——CURRENT_DATE是日期类型,HOUR(CURRENT_TIME)是整数,直接用+拼接会触发数据库的隐式类型转换,但结果根本不是你想要的YYYY-MM-DD HH:00:00格式的时间,自然匹配不到数据。
下面针对主流数据库给出正确的写法,你可以根据自己使用的数据库选择:
MySQL 解决方案
有两种简单的方式构造当前整点时间:
- 方法一:用
DATE_FORMAT直接格式化当前时间到整点
SELECT matchId FROM Matches WHERE matchDate = DATE_FORMAT(NOW(), '%Y-%m-%d %H:00:00');
- 方法二:拼接日期、当前小时和固定的分钟秒
SELECT matchId FROM Matches WHERE matchDate = CONCAT(CURDATE(), ' ', HOUR(NOW()), ':00:00');
PostgreSQL 解决方案
PostgreSQL有专门的截断函数,一步到位:
SELECT matchId FROM Matches WHERE matchDate = DATE_TRUNC('hour', CURRENT_TIMESTAMP);
如果偏好拼接方式,记得把结果转为时间类型:
SELECT matchId FROM Matches WHERE matchDate = CONCAT(CURRENT_DATE, ' ', EXTRACT(HOUR FROM CURRENT_TIMESTAMP), ':00:00')::TIMESTAMP;
SQL Server 解决方案
可以用日期加减的方式快速得到整点:
SELECT matchId FROM Matches WHERE matchDate = DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0);
或者用格式化函数生成目标字符串:
SELECT matchId FROM Matches WHERE matchDate = FORMAT(GETDATE(), 'yyyy-MM-dd HH:00:00');
小提醒
如果matchDate是datetime类型,优先用数据库内置的日期函数处理,尽量避免字符串拼接——不同时区、日期格式设置下,字符串拼接容易出现兼容问题哦。
内容的提问来源于stack exchange,提问作者djokerndthief
相关产品推荐
相关产品推荐

