2011-10-28 107 views
2

我存儲datetime到數據庫作爲標準日期時間像2011-10-19 17:18:44.083。如果datetime字段等於今天后的5天,我需要選擇所有行。但我不希望這一比較也在時間即將到來的時候就足夠了。SQL服務器datetime比較

SELECT * FROM dbo.TestBox 
where TargetDate = dateadd(day,5, getdate()) 

這是行不通的,我不知道爲什麼,但可能它的時間。

由於提前,

回答

2

如果你使用2008+,你可以投既作爲一個日期:如果您使用2005年或之前,做這樣的事情

where convert(date, targetdate) = convert(date, dateadd(day, 5, getdate())) 

where convert(varchar, targetdate, 101) = convert(varchar, dateadd(day, 5, getdate()), 101) 
+0

所以,如果我在.NET設置一個存儲過程日期時間參數作爲DbType.DateTime和SQL的匹配參數是日期時間,則需要此轉換? – MacGyver

2

你可以這樣做:

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) 
1

嘗試:

select * 
from dbo.TestBox 
where datediff(dd, getdate(), TargetDate) = 5 

示例代碼:

declare @targetDate as DateTime 
set @targetDate = '2011-11-2' 
select datediff(dd, getdate(), @targetDate) 

輸出:

+0

格式爲'(part,start,end)',所以它會是GETDATE() - TargetDate ... – sll

+0

爲什麼downvote? – RedFilter

0

以下查詢應該做什麼需要。

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 
+0

我收到這個答案的迴應票,將有助於評論爲什麼。 –

0

這個問題可能是由於日期格式不同造成的。

此連結的所有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

1

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.