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

SSMS查询datetime类型列使用日期作为WHERE条件返回0行问题

问题原因
  • 核心原因是datetime类型存储包含完整的时分秒信息,你在SSMS中看到的2018-09-05是工具的简化显示结果,并非真实存储值。如果对应行的DateTimeColumn列实际携带了非零点的时分秒(例如2018-09-05 09:15:32.456),精确匹配'2018-09-05 00:00:00.000'自然无法命中任何行。
  • 少数情况和日期字符串的隐式转换规则有关:部分SQL Server实例的语言/日期格式设置会导致字符串转datetime时出现解析偏差,该场景出现概率极低。
解决方案

你可以选择以下任意一种方法实现查询2018-09-05全天所有数据的需求,优先推荐第一种避免索引失效:

  • 方法1:使用时间范围过滤,这种写法可以命中DateTimeColumn上的索引,性能最优
SELECT *
  FROM dbo.Commande
  WHERE DateTimeColumn >= '2018-09-05'
    AND DateTimeColumn < '2018-09-06';
  • 方法2:转换日期部分匹配,适合对性能要求不高、列上无索引的场景
SELECT *
  FROM dbo.Commande
  WHERE CAST(DateTimeColumn AS DATE) = '2018-09-05';
  • 验证方法:如果你想确认列的真实存储值,可以修改SSMS的显示格式,或者执行以下查询查看完整时分秒信息
SELECT CONVERT(VARCHAR(50), DateTimeColumn, 121) AS FullDateTime
  FROM dbo.Commande
  WHERE CAST(DateTimeColumn AS DATE) = '2018-09-05';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:36:02