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

SQL Server查询中GETDATE()无法返回当日日期的问题求解

问题根因

你的查询查不到当日数据有两个核心错误:

  • GETDATE()返回值带当前系统的精确时分秒、毫秒信息,而production_date是DATETIME类型,存储的当日记录会自带业务发生的时间(比如2022-07-12 09:15:32),直接用等值匹配只能命中和当前系统时间完全一致的记录,自然无法返回当日其他时间的数据。传入7/12/22这类格式的字符串日期查不到结果,一方面是字符串转日期时存在区域设置导致的月/日识别歧义,另一方面也存在同样的时间部分不匹配问题。
  • WHERE子句中逻辑运算符优先级错误:SQL中AND的运算优先级高于OR,你当前的写法实际执行逻辑为(company_code = '10' AND production_date = GETDATE() AND posting_type = 'MMQ') OR posting_type = 'IRS' OR posting_type = 'PME',后两个OR关联的条件会绕过公司编码、日期的过滤规则,返回大量不符合预期的结果。
修正后的可运行SQL
SELECT 
    t.item_no,
    SUM(t.good_quantity) AS [Good Qty],
    SUM(t.scrap_quantity) AS [Scrap Qty],
    i.selling_price
FROM
    acsAUTOSYS.dbo.inventory_master i
FULL OUTER JOIN 
    acsMFG.dbo.production_posting_trans t 
    ON t.item_no = i.item_no
    AND i.company_code = t.company_code
WHERE  
    t.company_code = '10'
    -- 日期范围匹配:覆盖当日0点到次日0点的所有时间记录,可命中字段索引
    AND t.production_date >= CAST(GETDATE() AS DATE)
    AND t.production_date < DATEADD(DAY, 1, CAST(GETDATE() AS DATE))
    -- 多枚举值条件加括号明确逻辑,避免优先级错误
    AND (
        t.posting_type = 'MMQ'
        OR t.posting_type = 'IRS'
        OR t.posting_type = 'PME'
    )
GROUP BY 
    t.item_no,
    i.selling_price
注意事项
  • 传入字符串格式的日期参数时,不要使用7/12/22这类存在歧义的格式,不同服务器区域设置可能将其识别为7月12日或12月7日,统一使用'2022-07-12'这类ISO标准日期格式即可避免转换错误。
  • 上述范围查询的日期判断写法,比CAST(production_date AS DATE) = CAST(GETDATE() AS DATE)的写法性能更优,不会导致production_date字段上的索引失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:01:52