2009-08-19 25 views
1

當我知道有匹配的記錄時,下面的SQL返回0條記錄 - 我認爲這是導致我出現問題的日期。返回0個記錄/日期問題的SQL?

這裏是SQL:

exec sp_executesql N'SELECT * FROM [dbo].[QuizAnswersCompleted] 
WHERE [dbo].[QuizAnswersCompleted].[QuizProfileID] = @QuizProfileID0 
AND [dbo].[QuizAnswersCompleted].[DateCompleted] = @DateCompleted1 
',N'@QuizProfileID0 int,@DateCompleted1 datetime',@QuizProfileID0=31,@DateCompleted1='Aug 19 2009 4:29:03:000PM' 

這裏是相匹配的數據庫,該記錄的截屏:

alt text http://photos-d.ak.fbcdn.net/hphotos-ak-snc1/hs145.snc1/5371_117422998930_749683930_2374147_5891781_n.jpg

缺少什麼我在這裏?

回答

2

帶日期/時間像你有,也有一小部分時間,在您使用'Aug 19 2009 4:29:03:000PM'的查詢中,屏幕截圖僅顯示秒。如果你想要像你這樣的精確匹配是做你需要知道的全部時間:

select convert(char(23),YourDate,121) FROM YourTable 

嘗試「地板」你的約會:Floor a date in SQL server

+0

同意。 DateTime的最大分辨率是3毫秒。在4:29:03:000和4:29:04:000之間留下了大概333個可能的值。 – Anon246 2009-08-19 21:36:47

+1

作爲where子句的一部分在列上運行函數會導致較差的查詢性能(在較大的表上),因爲服務器將無法使用列的統計信息或索引。雖然看起來有點破解,但可以使用謂詞:WHERE [DateCompleted] BETWEEN @date AND @ dateUpper',其中@date是您之後的原始日期,而@dateUpper是日後999ms的日期。 – 2009-08-19 21:54:41

+0

問題是SQL是由SubSonic生成的,所以我無法調整查詢 - 我將不得不想出一個不使用日期而不是問題的不同解決方案 - 感謝所有幫助! – Slee 2009-08-19 23:20:07