我正在尝试这样做:
select * from table
where ChangingDate(this is a column which has date and time) = today's date + 1
我是SQL的学习者,我对日期格式很不满意。如果有人可以提供帮助,我感激不尽。
谢谢!
答案 0 :(得分:5)
这将返回明天的数据
WHERE ChangingDate > = dateadd(dd, datediff(dd, 0, getdate())+1, 0)
and ChangingDate < dateadd(dd, datediff(dd, 0, getdate())+2, 0)
这将返回今天的数据
WHERE ChangingDate > = dateadd(dd, datediff(dd, 0, getdate())+0, 0)
and ChangingDate < dateadd(dd, datediff(dd, 0, getdate())+1, 0)
答案 1 :(得分:5)
在数据库中有一个日期时间的技巧 - 你几乎从不想要=比较,因为你看到它们还包括一个时间组件。相反,您想知道它是否属于包含整天的范围。 Sql Server 2008有一个新的date
类型可以帮助解决这个问题,但在升级之前,请执行以下操作:
WHERE (ChangingDate >= dateadd(dd,1, datediff(dd,0, getDate()))
AND ChangingDate < dateadd(dd,2, datediff(dd,0, getDate())))
如果某些所有记录都具有该列中时间组件的0值(或其他已知值),则可以进行等于比较。您不想做的是截断列,因为这意味着每个记录执行额外的工作(慢)并且会破坏您的索引(非常慢)。
答案 2 :(得分:1)
select *
from MyTable
where DATEADD(dd, 0, DATEDIFF(dd, 0, ChangingDate)) = SELECT DATEADD(dd, 1, DATEDIFF(dd, 0, GETDATE()))
答案 3 :(得分:0)
您可能想尝试类似
的内容select * from table where columndate=GetDate() + 1
答案 4 :(得分:0)
听起来您希望DATEPART功能无论何时何时都能找到列日期具有相同年份,月份和日期的位置:
SELECT * FROM Table
WHERE
DATEPART(Month, Date) = DATEPART(Month, @SomeDate)
AND DATEPART(Day, Date) = DATEPART(Day, @SomeDate)
AND DATEPART(Year, Date) = DATEPART(Year, @SomeDate)
否则,您希望像其他海报一样使用DateAdd。