2013-05-06 52 views
0

我寫了這個查詢:如何使用WHERE子句與日期時間在SQL Server 2008

SELECT * 
FROM w_tbl 
WHERE DID NOT IN (SELECT DId FROM tbl_Assign) 
    AND CAST(MeasDateTime AS Date) = @dta 
ORDER BY 
    CAST(MeasDateTime as DATE) DESC 

因此,大家可以看到我送一個參數化查詢。

所以我把24/09/2010 00:00:00@dta

但我得到這個錯誤:

Conversion failed when converting date and/or time from charterer string.

我告訴你爲什麼我這樣做,我的目的:

我有一個日期時間列,並我想按日期選擇/獲取所有數據(即我不想取得日期時間明智的,它必須只是根據日期)

+0

你的意思是你將'@ dta'的值設置爲*字符串*?爲什麼不把它設置爲'DateTime'呢? – 2013-05-06 06:41:01

+0

我會懷疑MeasDateTime可能沒有有效的值。順便提一下,這個專欄的類型是什麼? – 2013-05-06 06:44:30

+0

@JonSkeet我在DB領域也是日期時間,它不是字符串.... – 2013-05-06 06:44:57

回答

0

如果你想僅按照日期來選擇,你有DateTime類型,使用日期函數:

你的情況
DATEADD (dd , 0 , DATEDIFF (dd , 0 , @dta)) 

所以:

SELECT * 
FROM w_tbl 
WHERE DID NOT IN (SELECT DId FROM tbl_Assign) 
    AND DATEADD (dd , 0 , DATEDIFF (dd , 0 , MeasDateTime)) = DATEADD (dd , 0 , DATEDIFF (dd , 0 , @dta)) 
ORDER BY 
    MeasDateTime DESC -- No need for CAST/CONVERT here, it will be ok either way 
-1

首先檢查@dta值的原因24/09/2010可能是錯誤的日期。嘗試使用2010年9月24日或2010年9月24日並檢查。總是以avoid confusion in dd/MM/yyyy and MM/dd/yyyy月份使用MMM。 SQL使用MMM正確處理日期時間格式。像dd-MMM-yyyy一樣。默認情況下,SQL使用美國標準,取日期格式爲MM/dd/yyyy。

謝謝。

+0

SQL Server一致解釋的唯一格式是'YYYYMMDD';這是[記錄](http://msdn.microsoft.com/en-us/library/ms187819.aspx)和日期文字使用其他格式遲早會由於語言環境設置而中斷。 – Pondlife 2013-05-06 14:47:45

+0

@Pondlife。感謝您使用文檔進行更新。但是對於上述問題,Jitendra對dd/MM/yyyy和MM/dd/yyyy日期格式感到困惑,這是他的實際問題,我想在使用區域設置格式進行投射或轉換時突出Jitendra和其他人。 – 2013-05-07 09:04:27

相關問題