2012-06-15 135 views
5

我知道有一個稱爲isdate()來驗證日期時間列的函數,但它只適用於smalldatetime和datetime類型。 現在的問題是:有沒有類似的方式來驗證sql server 2008和2012中的新數據類型datetime2?是否有像datedate2這樣的函數?

+3

嚴格地說ISDATE()不驗證datetime列;它驗證表達式是否可以解析爲日期時間。它在一個專欄之後有點晚了! –

+1

@MitchWheat這是一個很好的觀點。似乎更可能驗證(a)在varchar列中存儲的日期不正確或(b)數據類型不正確的輸入參數。 –

+0

我想驗證Excel表格中包含某些日期列的輸入到臨時表中。 – Vladimir

回答

12

在SQL Server 2012中,你可以使用TRY_CONVERT

SELECT TRY_CONVERT(DATETIME2, '2012-02-02 13:42:55.2323623'), 
     TRY_CONVERT(DATETIME2, '2012-02-31 13:42:55.2323623'); 

結果:

2012-02-02 13:42:55.2323623 NULL 

或者TRY_PARSE:(的結果相同)

SELECT TRY_PARSE('2012-02-02 13:42:55.2323623' AS DATETIME2), 
     TRY_PARSE('2012-02-31 13:42:55.2323623' AS DATETIME2); 

對不起,我沒有對你有一個聰明的答案< 2012年,你可以,我想,說

SELECT ISDATE(LEFT('2012-02-02 13:42:55.2323623', 23); 

但是,感覺很髒。

TRY_CONVERT documentation on MSDN
TRY_PARSE documentation on MSDN

+0

不錯的一個................ –

+0

聰明的答案!我很喜歡它!另一個關於sql server 2008中的datetime2的問題是,有沒有辦法在1753年1月1日之前檢查有效日期?使用此命令將會導致無效日期SELECT ISDATE(LEFT('2012-02-02 13:42:55.2323623',23)); – Vladimir

+0

@Vladimir對不起,我現在才注意到你的問題。這是學術還是你真的有日期<1753年? –

相關問題