2011-03-23 27 views
1

我試圖做到這一點:構成帶有日期的SQL查詢偏移

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

我SQL的學習者,我不擅長的日期格式。我很感激有人能幫忙。

謝謝!

+0

你的問題是什麼? – 2011-03-23 20:01:51

回答

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?

0

你可能想嘗試像

select * from table where columndate=GetDate() + 1 
+1

不工作,他有時間以及 – SQLMenace 2011-03-23 20:07:11

5

數據庫中存在日期時間的技巧 - 你幾乎不需要比較,因爲正如你看到的那樣,它們還包含一個時間分量。相反,您想知道它是否落入包含整個一天的範圍內。 SQL Server 2008中有一個新的date類型有助於這一點,但要等到升級,像這樣做:

WHERE (ChangingDate >= dateadd(dd,1, datediff(dd,0, getDate())) 
     AND ChangingDate < dateadd(dd,2, datediff(dd,0, getDate()))) 

你可以做,如果你是一定等號比較所有記錄有0〜值(或其他已知值)作爲該列中的時間分量。你不想做的是截斷列,因爲這意味着每個記錄做了額外的工作(慢),並會打破你的索引(非常慢)。

1
select * 
    from MyTable 
where DATEADD(dd, 0, DATEDIFF(dd, 0, ChangingDate)) = SELECT DATEADD(dd, 1, DATEDIFF(dd, 0, GETDATE())) 
+0

不工作,他也有工作時間 – 2011-03-23 20:09:07

+0

DATEADD(dd,0,DATEDIFF(dd,0,@datetimecolumn))只給出日期時間的日期部分。 – Greg 2011-03-23 20:11:25

+0

圍繞該列的函數不是可靠的,請參閱http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/only-in-a-database-can-you-get-1000-impr – SQLMenace 2011-03-23 20:11:36

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像其他海報。

+0

不可靠,請查看http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/only-in-a-database-can-you-get-1000-impr – SQLMenace 2011-03-23 20:06:55