我存儲datetime到數據庫作爲標準日期時間像2011-10-19 17:18:44.083。如果datetime字段等於今天后的5天,我需要選擇所有行。但我不希望這一比較也在時間即將到來的時候就足夠了。SQL服務器datetime比較
SELECT * FROM dbo.TestBox
where TargetDate = dateadd(day,5, getdate())
這是行不通的,我不知道爲什麼,但可能它的時間。
由於提前,
我存儲datetime到數據庫作爲標準日期時間像2011-10-19 17:18:44.083。如果datetime字段等於今天后的5天,我需要選擇所有行。但我不希望這一比較也在時間即將到來的時候就足夠了。SQL服務器datetime比較
SELECT * FROM dbo.TestBox
where TargetDate = dateadd(day,5, getdate())
這是行不通的,我不知道爲什麼,但可能它的時間。
由於提前,
如果你使用2008+,你可以投既作爲一個日期:如果您使用2005年或之前,做這樣的事情
where convert(date, targetdate) = convert(date, dateadd(day, 5, getdate()))
:
where convert(varchar, targetdate, 101) = convert(varchar, dateadd(day, 5, getdate()), 101)
你可以這樣做:
SELECT * FROM dbo.TestBox
where CONVERT(VARCHAR(8),TargetDate,112) = CONVERT(VARCHAR(8),dateadd(day,5, getdate()),112)
或者,如果你有TargetDate索引:
SELECT * FROM dbo.TestBox
where TargetDate >= CONVERT(VARCHAR(8),dateadd(day,5, getdate()),112)
AND TargetDate < CONVERT(VARCHAR(8),dateadd(day,6, getdate()),112)
以下查詢應該做什麼需要。
SELECT * FROM dbo.TestBox
WHERE TargetDate
BETWEEN DATEADD(DAY, 5, DATEADD(MILLISECOND, 1, DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)))
AND DATEADD(DAY, 5, DATEADD(MILLISECOND, -2, DATEADD(DAY, datediff(day, 0, GETDATE()) + 1, 0))) -- between the start and end of the date in 5 days
我收到這個答案的迴應票,將有助於評論爲什麼。 –
這個問題可能是由於日期格式不同造成的。
此連結的所有SQL中的日期格式設置選項http://databases.aspfaq.com/database/what-are-the-valid-styles-for-converting-datetime-to-string.html
試着這麼做:
SELECT * FROM dbo.TestBox where CONVERT(CHAR(8), TargetDate , 1)= dateadd(day,5, (CHAR(8), getdate(), 1))
該功能可將您比較相同的格式,這兩個日期,並失去一部分時間
代替使用GETDATE(),你也可以使用CURRENT_TIMESTAMP
DATEDIFF
to rescu電子!
DECLARE @monday DATETIME;
DECLARE @fridayAM DATETIME;
DECLARE @fridayPM DATETIME;
SET @monday = '2011-10-23 10:50:00';
SET @fridayAM = '2011-10-28 08:00:00';
SET @fridayPM = '2011-10-28 17:30:00';
SELECT DATEDIFF(DAY, @monday, @fridayAm) AS AmDiff,
DATEDIFF(DAY, @monday, @fridayPm) AS PmDiff
兩個AmDiff和PmDiff會5.
所以,如果我在.NET設置一個存儲過程日期時間參數作爲DbType.DateTime和SQL的匹配參數是日期時間,則需要此轉換? – MacGyver