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

SQL中日期与日期时间比较问题求助

解决DATETIME类型日期比较失效的问题

我来帮你搞定这个日期筛选的问题!你的核心问题出在DATETIME类型包含时间部分,而你用纯日期字符串做比较,导致1月10日当天带有时间的记录被过滤掉了。

问题原因

request.date是DATETIME类型,存储的值可能是2019-01-10 14:30:00这类带具体时间的格式。当你写request.date <= '2019-01-10'时,数据库会自动把字符串转换成2019-01-10 00:00:00,这样所有10号当天0点之后的记录都会不符合条件,自然查不到。

解决方案

这里有两种靠谱的解决办法,你可以根据场景选择:

方法1:调整日期范围(推荐,不影响索引)

把结束条件改成小于下一天的0点,这样就能包含1月10日全天的所有记录:

request.date >= '2019-01-09' AND request.date < '2019-01-11'

这种方式能利用request.date上的索引,查询效率更高。

方法2:用DATE()函数提取日期部分

如果不关心索引效率,可以用DATE()函数把DATETIME转成纯日期再比较:

DATE(request.date) BETWEEN '2019-01-09' AND '2019-01-10'

注意:这种写法会让request.date上的索引失效,数据量大的时候查询会变慢。

修改后的完整SQL

我还帮你简化了JOIN的写法(现代SQL不需要嵌套那么多括号):

SELECT 
    request.id, 
    request.date, 
    request.total_price, 
    item.cod_GERFIP,
    item.price,
    item.name,
    request_item.quantity, 
    section.name AS section,
    user.firstname,
    user.lastname 
FROM request_item
INNER JOIN request ON request_item.id_request = request.id
INNER JOIN item ON request_item.id_item = item.cod_GERFIP
INNER JOIN user ON request.id_user = user.id
INNER JOIN section ON user.section = section.id
WHERE 
    request.date >= '2019-01-09' 
    AND request.date < '2019-01-11'  -- 这里是关键修改
    AND item.id_type = '1' 
ORDER BY request.date DESC;

内容的提问来源于stack exchange,提问作者Mikey Baptista

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:32:45