You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 16:27:02