我正在使用SQL Server 2008和C# Windows Forms应用程序。产品表还有其他值以及到期日期,我想在网格中显示ProductID, ProductName, AvailableQuantity, and ExpiryDate
,以便我可以让用户了解在截止日期之前过期的项目。
目的是仅将那些到期日越来越近的产品添加到该网格中,即在 2 个月内过期的产品。
我尝试使用TRUNC
函数,如下所示:
select *
from tblProducts
where DateExpiry < TRUNC( SYSDATE ) + INTERVAL '62' DAY;
但我在 SQL Server 2008 中收到以下错误:
Msg 195,级别 15,状态 10,第 1
行 "TRUNC"不是可识别的内置函数名称。
为什么我会收到此错误?我在网上看到相同的代码工作正常,但是,在我的情况下它正在生成错误。还有其他方法可以满足我的要求吗?还是我必须以某种方式修改查询,这可以帮助我解决错误?
在 SQL Server 中,您应该这样做。
select *
from tblProducts
where DateExpiry < DATEADD(month, 2, GETDATE());
DateDiff 可用于计算两个日期之间的总时间范围。这些日期可以来自表值,也可以是"今天的"日期。我建议你按总天数而不是月来区分,因为"一个月"是一个经常变化的可变时间量。
select *
from tblProducts
where DATEDIFF(day, GETDATE(), DateExpiry) < 62
假设DateExpiry
应该大于当前日期,因为我们正在寻找尚未过期但应该很快过期的值。
该命令不是尝试计算"今天加 62 天"是什么,然后尝试查看数据库值是否小于该值,而是从当前日期中减去数据库值并检查它是否小于一个数字。
这将选择从今天起不到 62 天内过期的任何内容。
更多阅读日期差异。