2011-09-05 116 views
0

我有一個SQL查詢,其中我將通過dd/mm/yyyy但SQL查詢需要mm/dd/yyyy不同格式的SQL Server日期時間比較

如何啓用此查詢取dd/mm/yyyy並根據正確的格式顯示正確的結果?在SQL Server 2008中實現這件事的最佳方式是什麼?

SELECT int_ExchangeRateId, int_LocationId, dtm_Date 
FROM ExchangeRate 
WHERE dtm_Date >= '01/02/2006' AND dtm_Date <= '12/02/2006' AND int_LocationId = 98 

這工作正常:

SELECT int_ExchangeRateId, int_LocationId,dtm_Date 
FROM ExchangeRate 
WHERE CAST(dtm_Date AS DATE) BETWEEN '2006-02-02' AND '2006-02-12' 
    AND int_LocationId=98 
+2

使用'date'參數而不是字符串參數。如果你必須使用字符串,至少要使用一個明確的格式,如'yyyymmdd' –

+0

與你的問題無關,但我只需要評論,我發現它擔心你的數據類型前綴字段的名稱。 – Tony

回答

5

對於查詢,我會使用YYYY-MM-DD格式的日期。至於輸出見kalyan的答案。

編輯:總結下面的評論(感謝marc_s),必須要使用的格式YYYYMMDD當不包括部分時間除非您使用的是新的日期類型datedatetime2和SQL datetimeoffset Server 2008.

+1

其實 - 這個格式是**不是**語言無關....你需要使用'YYYYMMDD'(或:'YYYY-MM-DDTHH:MM:SS') –

+0

@marc_s - 我明白'YYYY-MM只要ISO 8601標準定義了一個日曆日期(http://www.iso.org/iso/date_and_time_format),並且OP沒有提到需要時間部分,「D-D」格式就是中立的。我很欣賞這可能不是SQL Server 2008的情況;我不得不再次看看BOL :) – Tony

+0

不,**它不是中性** - 試試這個:'set language british .... SELECT CAST('2011-08-26'AS DATETIME)' - * *這將失敗!** - 與語言無關的ISO-8601格式爲'YYYYMMDD'(沒有破折號) - 相信我! –

2

參考DateTime Formating爲了這個目的,通過提供某些參數,我們可以格式化日期成需要的格式。