我创建了一个c#应用程序,需要在表单加载后在datagridview上显示,该数据视图将填充几乎已过期的条目(到期日期前1个月)。问题是我有一个本地数据库,我必须将当前时间与到期日期进行比较。非常感谢! 有查询:
SELECT * FROM [Table] WHERE datediff(month,expirationdate,CURRENT_DATE())<1
答案 0 :(得分:0)
我有3个关于处理DateTimes的基本规则:
如果您遵循这些规则,则执行处理变得简单:
DateTime dueTime //set someplace else
if(DateTime.Now.AddMonth(-1) >= dueTime)
//Due time is in one month or less
答案 1 :(得分:0)
CURRENT_DATE是MySql和Oracle数据库系统中的一个函数。在SqlServer中,您使用GetDate() function. 但是更改该功能是不够的,因为您的查询中存在其他问题,我认为您应该将其更改为:
SELECT * FROM [Table] WHERE expirationdate >= GetDate()
AND datediff(month, GetDate(), expirationdate) between 0 and 1
请注意,datediff的第二个参数是 startdate ,第三个是 enddate 。如果您的逻辑是查找到期日期距离今天不到一个月的所有记录,那么 expirationdate 值将用于 enddate 参数和当前日期是开始日期。我还假设您过去并不想要几天,因此我还添加了一个检查,以排除比今天更低的每个 expirationdate 。
这个解决方案是错误的,因为它仍然包含月份部分相差1个整数的日期。但当前日期为2018年2月13日时,2018年3月18日的失效日期将包括在内,因为3和2之间的差异仍为1。
如果您想要更精确,那么您应该在几天内搜索差异而不是几个月。
SELECT * FROM [Table] WHERE expirationdate >= GetDate()
AND datediff(day, GetDate(), expirationdate) <= 30
这里我使用了一个月的30天的标准化值。