当前日期在生效与到期日区间内,SQL查询Tariff数据无结果
问题排查与修复
核心问题:日期条件逻辑错误
你的查询仅判断了Effective_Date >= GETDATE(),这会只筛选生效日期晚于当前时间的数据,但你需要的是当前时间处于Effective_Date到Expiry_Date区间内的记录,因此条件完全写反,且缺少到期日期的校验。
具体修复步骤
- 修正日期区间判断:
正确的逻辑是当前时间需在生效日期之后、到期日期之前(包含边界),所以WHERE子句的日期条件需改为:Effective_Date <= GETDATE() AND Expiry_Date >= GETDATE() - 处理时间精度差异:
如果Effective_Date和Expiry_Date是仅存年月日的DATE类型,而GETDATE()返回带时分秒的DATETIME类型,可通过CAST(GETDATE() AS DATE)统一精度,避免因时分秒导致的匹配偏差:Effective_Date <= CAST(GETDATE() AS DATE) AND Expiry_Date >= CAST(GETDATE() AS DATE)
完整修正后的SQL
SELECT [ID], [Tariff_ID], [Effective_Date], [Expiry_Date], [Category], [Cargo_Class], [Wt_Min], [Wt_Max], [Charges_PKR], [Charges_Per] FROM [CARGO].[dbo].[Tariff_Handling] WHERE Effective_Date <= CAST(GETDATE() AS DATE) AND Expiry_Date >= CAST(GETDATE() AS DATE) AND Wt_Min <= 4 AND Category = 'AFU' AND Cargo_Class = 'GEN' AND Tariff_ID = 1
其他潜在排查点
- 检查
Category、Cargo_Class、Tariff_ID的取值是否与数据库存储完全一致(注意大小写、空格,比如是否存在'AFU '带尾空格的情况) - 确认
Wt_Min字段的数值类型,确保与4的比较逻辑正确(比如字段为小数类型时,是否存在3.9这类符合条件的值,或部分数据的Wt_Min大于4)
内容的提问来源于stack exchange,提问作者mrs awais
相关产品推荐
相关产品推荐

