使用日期偏移量编写SQL查询

时间:2011-03-23 19:59:49

标签: sql sql-server sql-server-2005 tsql

我正在尝试这样做:

select * from table 
where ChangingDate(this is a column which has date and time) = today's date + 1

我是SQL的学习者,我对日期格式很不满意。如果有人可以提供帮助,我感激不尽。

谢谢!

5 个答案:

答案 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)

另见How Does Between Work With Dates In SQL Server?

答案 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。