在我的应用程序中,我使用日期(存储为DateTime),就像我只使用日期部分一样。 对于今天发布的发票,我使用以下(工作正常):
WHERE DATEADD(D, 0, DATEDIFF(D, 0, IssuedOn))=DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))";
但是昨天发出的发票 - 当前日期前一天呢?我试图减去这些并检查结果是否为1但是不起作用。
感谢您的帮助
答案 0 :(得分:1)
这是您所需要的,因为您使用的是sql-server 2005或更早版本:
WHERE
IssuedOn >= DATEADD(D, 0, DATEDIFF(D, 1, GETDATE()))
and IssuedOn < DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))
可以这样缩短:
WHERE
IssuedOn >= DATEDIFF(D, 1, GETDATE())
and IssuedOn < DATEDIFF(D, 0, GETDATE())
请记住标记版本和RDBMS
答案 1 :(得分:0)
如果希望索引有机会使用,请不要在列上应用任何函数。你的情况(今天)将写成:
WHERE IssuedOn >= DATEADD(day, 0 + DATEDIFF(day, '20000101', CURRENT_TIMESTAMP), '20000101')
AND IssuedOn < DATEADD(day, 1 + DATEDIFF(day, '20000101', CURRENT_TIMESTAMP), '20000101')
和昨天:
WHERE IssuedOn >= DATEADD(day, -1 + DATEDIFF(day, '20000101', CURRENT_TIMESTAMP), '20000101')
AND IssuedOn < DATEADD(day, 0 + DATEDIFF(day, '20000101', CURRENT_TIMESTAMP), '20000101')