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
相关产品推荐
相关产品推荐

