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

SQL Server中如何仅使用日期部分查询datetime类型数据

SQL Server datetime类型按纯日期维度查询实现方案

datetime类型本身包含完整的时分秒信息,直接和纯日期字符串做等值匹配时,SQL Server会自动将字符串转换为yyyy-MM-dd 00:00:00.000格式的datetime值,仅能匹配到当天零点整的记录,其余时段的数据都会被过滤掉,所以你现在的写法无法覆盖目标日期的全量数据,可以用以下几种方案实现需求:

  • 方案1:转换为DATE类型比较(写法最简单,适合中小数据量场景)
    SQL Server 2008及以上版本支持DATE纯日期类型,直接转换后比较即可:

    WHERE CAST(str_day AS DATE) = '2021-10-23' 
      AND CAST(end_day AS DATE) = '2021-10-24'
    

    注意:这种写法会对字段做函数转换,如果str_day、end_day上建有查询索引,会导致索引失效,百万级以上大数据量查询不推荐。

  • 方案2:时间范围匹配(性能最优,推荐全场景使用)
    用左闭右开的时间区间覆盖目标日期的所有时分秒范围,不需要对字段做任何函数转换,可以正常命中索引,查询效率最高:

    WHERE 
      str_day >= '2021-10-23' AND str_day < '2021-10-24'
      AND end_day >= '2021-10-24' AND end_day < '2021-10-25'
    
  • 方案3:CONVERT字符串转换(兼容SQL Server 2005及更早版本)
    旧版本不支持DATE类型的情况下,可以用CONVERT函数把datetime转换为yyyy-MM-dd格式的字符串后比较:

    WHERE CONVERT(VARCHAR(10), str_day, 23) = '2021-10-23'
      AND CONVERT(VARCHAR(10), end_day, 23) = '2021-10-24'
    

    这种写法同样会导致索引失效,仅作为旧版本兼容方案使用。

另外你提到的2021-10-225属于非法日期格式,插入时SQL Server会直接报错无法入库,属于脏数据,建议先做数据清洗修正异常值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:36:02