2009-10-05 69 views
2

我很難做這個查詢。 我想在我的查詢中比較日期,從我的數據庫日期是這種格式:
(MM/DD/YYYY HH:MM:SS AM)
我想比較這個日期與明天,今天加一。
我的問題是:SQL SERVER 2005中的SQL查詢 - 比較日期

如何在sql server中聲明明天的日期?
你會如何比較這兩個日期?

謝謝! = d

編輯:在DB日期爲VarChar = S

+0

stored as varchar?或者這種格式是你在客戶端工具中看到的? – gbn 2009-10-05 19:10:49

回答

5

聲明明天的日期:DATEADD(dd,1,getdate())

比較日期:

WHERE column >= CONVERT(datetime, CONVERT(varchar, DATEADD(day, 1, GETDATE()), 102)) 
    AND column < CONVERT(datetime, CONVERT(varchar, DATEADD(day, 2, GETDATE()), 102)) 
5

承擔列

WHERE 
    MyCol >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 1) 
    AND 
    MyCol < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 2) 

datetime數據類型這個(yyyy-mm-dd)刪除了MyCol測試的時間組件明天

2009-10-06 00:00:00 < = MyCol < 2009-10-07 00:00:00

你不從MyCol脫模時間:這會影響性能,並禁止使用索引等

Efficiency of remove time from datetime question,這就是爲什麼我用這種格式,避免VARCHAR轉換...

編輯:

避免隱式轉換和字符串匹配

10/06/2009 < = MyCol < 10/07/2009

WHERE 
    MyCol >= CONVERT(char(10), DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 1), 101) 
    AND 
    MyCol < CONVERT(char(10), DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 2), 101) 

當然,它會在十二月底失敗...

+0

+1使用MyCol上的索引,不要將它包裝在一個函數中! – 2009-10-05 19:20:01

1

我會想你的日期是最可能在SQL Server的日期時間數據類型中,並且您給出的格式只是默認的字符串表示形式。

通常情況下,我使用類似:

SELECT * 
FROM tbl 
WHERE datecol = CONVERT(datetime, CONVERT(varchar, DATEADD(day, 1, GETDATE()), 101)) 

但是,如果你的日期時間包括時間片,你需要使用這樣的事情:

SELECT * 
FROM tbl 
WHERE datecol >= CONVERT(datetime, CONVERT(varchar, DATEADD(day, 1, GETDATE()), 101)) 
    AND datecol < CONVERT(datetime, CONVERT(varchar, DATEADD(day, 2, GETDATE()), 101)) 

還有其他日期算術技巧你可以使用。這裏有許多的,所以如果你看SQL日期

0

SQL Server允許你來聲明變量

DECLARE @TomorrowsDate DateTime 

而且你可以將其設置爲當前日期和時間

SET @TomorrowsDate = DATEADD (Day, 0, GETDATE()) 

對於明天的日期(不含時間)

SET @TomorrowsDate = DATEADD (Day, 1, CONVERT (VARCHAR, GETDATE(), 101)) 

要在帶有列的查詢中使用它而不聲明av ariable

SELECT Column1, Column2 
FROM YourTableName 
WHERE DateColumn BETWEEN DATEADD (Day, 0, CONVERT (VARCHAR, GETDATE(), 101)) 
    AND DATEADD (Day, 1, CONVERT (VARCHAR, GETDATE(), 101))