2011-11-09 88 views
0

我有這樣的查詢運行正常:返回SQL怪異轉換

SELECT 
Value 
    FROM data 
    WHERE MetaDataID = 'f249819e-817f-4be5-bee9-21aa3d7f72e6' 

27/6/2011 19:12:28 
11/7/2011 19:18:54 
10/7/2011 11:49:35 
3/7/2011 17:41:53 

,如果我改變了查詢:

SELECT 
VALUE, 
MONTH(Value) 
    FROM data 
    WHERE MetaDataID = 'f249819e-817f-4be5-bee9-21aa3d7f72e6' 

我收到錯誤:將char數據類型轉換爲日期時間數據類型導致超出範圍的日期時間值。

信息,這可能有助於:

1)值列是VARCHAR類型。

2)當我指定MetaDataId時,我確定結果是「日期」。爲了確保,我已經使用WHERE IsDate(Value)= 1,並且我還使用了ISDATe(Value)來查看每個結果是否是日期並且它是...

我不'不知道爲什麼這會發生......任何人都有線索?

+1

服務器和客戶端是否位於同一本地化中 - 您的SQL服務器是否正在運行,例如,美國英語哪裏27將被解析爲月份編號? – Rup

+0

是相同的位置和月份被解析爲數字 – ShadowG

+0

這就是爲什麼,*如果*我要支持任意數據存儲如此,我包括適當類型的列,而不是將所有內容轉換爲/從varchars(我會通常還包括適當的密鑰和檢查,以便如果元數據意味着日期,則只能填充日期列) –

回答

3

您必須執行顯式轉換爲datetime數據類型。

SELECT 
VALUE, 
MONTH(Convert(DateTime, Value,103)) as [Month] 
    FROM data 
    WHERE MetaDataID = 'f249819e-817f-4be5-bee9-21aa3d7f72e6' 
+0

很好用!謝謝 – ShadowG

+0

沒有意識到'dd/mm/yy'格式沒有被'CAST'處理的問題,nice –