2012-01-04 49 views
1

我要創建兩個DATETIME變量,我可以用它來檢查與BETWEEN AND在存儲過程中只給定一個DATETIME當SQL Server 2008年從給定的DATETIME

因此,創建「BETWEEN/AND」 - 能夠日期時間,我得到2012/12/31 15:32:12作爲輸入,我想生成兩個新變量,分別是@from = 2012/12/31 00:00:00@to = 2012/12/31 23:59:59

這兩個變量用於檢查記錄是否位於它們之間 - 即與輸入日期相同。

我迷惑了使用CAST和CONVERT,但我真的不知道如何以我想要的方式操縱日期。

我應該以另一種方式做到這一點嗎?或者有沒有我不知道的功能?

+0

是的,更好的使用> =和< – 2012-01-04 14:01:29

回答

4

現在是版本independedt

declare @from datetime, @to datetime 

SET @from = convert(varchar, convert(datetime, '2012/12/31 15:32:12', 111), 112) 
SET @to = DATEADD(day, 1, @from) 

select * from yourtable where test date >= @from AND date < @to 
+0

它告訴我,'DATE不是一個定義的系統類型' - 這個版本是特定的嗎? – 2012-01-04 13:48:17

+0

是的,我會改變答案 – 2012-01-04 13:48:56

+0

現在它是版本independedt – 2012-01-04 13:50:27

2

你可以;

declare @input datetime = '2012/12/31 15:32:12' 
declare @from datetime = dateadd(day, 0, datediff(day, 0, @input)) 
declare @to datetime = dateadd(second, -1, dateadd(day, 1, @from)) 

>>> 
2012-12-31 00:00:00.000 2012-12-31 23:59:59.000 
0

首先使用(在這種情況下111)的適當日期格式轉換您輸入的日期爲varchar,對於至今,追加午夜

然後將您的varchar轉換回datetime。

實施例:

SELECT @from = CAST(CONVERT(VARCHAR(10), GETDATE(), 111) AS DATETIME) 
     ,@to = CAST(CONVERT(VARCHAR(10), GETDATE(), 111)+' 23:59:59:997' AS DATETIME) 

這裏是日期時間格式與簡要說明一種有用的圖表。

http://www.sql-server-helper.com/tips/date-formats.aspx

1

一定要小心@至準確性。 23:59:59.001是一個有效的日期,但如果你減去一整秒,它就不會出現在你的範圍內。

設置@from然後使用< @from + 1而不是BETWEEN更常見。 (該加號在SQL中增加了整整一天)。