MySQL如何查询datetime字段中每日上午11点前的所有订单记录
正确实现方案
核心逻辑是将下单时间date_added与当日11点整的时间节点做大小比较即可,不同数据库的语法存在差异,以下是主流数据库的实现:
MySQL
-- 写法1:简洁写法,利用CURDATE()直接取当前日期拼接11点时间 SELECT * FROM Tablename WHERE date_added < CONCAT(CURDATE(), ' 11:00:00'); -- 写法2:更严谨的显式时间类型转换,避免隐式转换风险 SELECT * FROM Tablename WHERE date_added < TIMESTAMP(CURDATE(), '11:00:00');
PostgreSQL
SELECT * FROM tablename WHERE date_added < CURRENT_DATE + INTERVAL '11 hours';
SQL Server
SELECT * FROM Tablename WHERE date_added < DATEADD(HOUR, 11, CAST(GETDATE() AS DATE))
Oracle
SELECT * FROM TABLENAME WHERE date_added < TRUNC(SYSDATE) + 11/24;
原SQL错误原因
你原有语句的STR_TO_DATE用法不符合语法规则:
STR_TO_DATE仅接受两个入参,第一个为待转换的字符串,第二个为格式模板,你传入了多个参数直接触发语法错误YEAR()、MONTH()、DAY()函数都需要传入日期类型参数才能返回对应值,单独调用属于非法写法
内容的提问来源于stack exchange,提问作者Alf Müller
相关产品推荐
相关产品推荐

