我正在使用SQL Server Management Studio編寫SQL查詢,並且ISO日期格式中有一些NVARCHAR類型值(例如:20130302T164800
)。我需要將它們轉換爲DATETIME將ISO格式的日期轉換爲DATETIME
我試過Convert()
功能,但它會導致一個例外:
一個nvarchar數據類型爲datetime數據類型的轉換導致超範圍的值
有沒有辦法可以做到這一點?
我正在使用SQL Server Management Studio編寫SQL查詢,並且ISO日期格式中有一些NVARCHAR類型值(例如:20130302T164800
)。我需要將它們轉換爲DATETIME將ISO格式的日期轉換爲DATETIME
我試過Convert()
功能,但它會導致一個例外:
一個nvarchar數據類型爲datetime數據類型的轉換導致超範圍的值
有沒有辦法可以做到這一點?
問題是您的字符串是而不是一個公認的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 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 Server能夠識別的任何格式,但這會將其轉換爲ISO8601。基本上,將其轉換爲不同的格式以允許轉換工作。
嗨伊恩,感謝您的快速回復。這讓我從很多麻煩中解脫出來。 –