2013-03-29 77 views
2

我正在使用SQL Server Management Studio編寫SQL查詢,並且ISO日期格式中有一些NVARCHAR類型值(例如:20130302T164800)。我需要將它們轉換爲DATETIME將ISO格式的日期轉換爲DATETIME

我試過Convert()功能,但它會導致一個例外:

一個nvarchar數據類型爲datetime數據類型的轉換導致超範圍的值

有沒有辦法可以做到這一點?

回答

6

問題是您的字符串是而不是一個公認的SQL Server日期時間格式。 SQL Server識別的ISO8601格式,它是:

yyyy-mm-ddThh:mi:ss.mmm 

這將是2013-03-02T16:48:00上面的日期。

請參閱Date And Time Styles部分。

所以下面的語句將失敗:

declare @date nvarchar(max) = '20130302T164800' 

select convertedDate = cast(@date as datetime) 

如果你的字符串轉換爲ISO8601格式,聲明將工作:

declare @date nvarchar(max) = '2013-03-02T16:48:00' 

select convertedDate = cast(@date as datetime) 

SQL Fiddle with demo

您可以更新您的格式,以一個SQL Server識別和投串爲datetime在一個聲明:

declare @date nvarchar(max) = '20130302T164800' 

select cast(left(@date, 4) 
    + '-' + substring(@date,5,2) 
    + '-' + substring(@date,7,5) 
    + ':' + substring(@date,12,2) 
    + ':' + substring(@date,14,2) as datetime) 

SQL Fiddle with demo

這只是一個示例,您可以將其轉換爲SQL Server能夠識別的任何格式,但這會將其轉換爲ISO8601。基本上,將其轉換爲不同的格式以允許轉換工作。

+0

嗨伊恩,感謝您的快速回復。這讓我從很多麻煩中解脫出來。 –

相關問題