2005-08-08T00:00:00+01:00 という形式の DateTime varchar があります。
- この形式に名前はありますか? (ISO8601ではありません。RFC3339ですか?)
- Transact-Sql を使用して DateTime に変換するにはどうすればよいですか?
編集 これは、他の入力からまとめた要約の回答です。
- これは、UTC からの時間オフセットを持つ ISO8601 です。UTC の場合、「+01:00」ではなく「Z」で終わります。 ウィキペディア
次のように、現地時間または utc に変換できます。
DECLARE @d VARCHAR(25) SET @d = '2007-08-08T00:01:00+01:00' SET @d = '2007-08-08T00:01:00-01:00' SET @d = ' 2007-08-08T00:01:00+05:30'
@d を入力として選択し、CONVERT(DATETIME, LEFT(@d, 19), 126) AS LocalDate , DATEADD(MINUTE , -CAST((SUBSTRING(@d, 20, 1) + RIGHT(@d, 2)) AS INT) , DATEADD(HOUR ,-CAST(SUBSTRING(@d, 20, 3) AS INT) , CONVERT(DATETIME, LEFT(@d, 19), 126))) as UtcDate WHERE @d LIKE ' _ - - _T__ : : [+-] : '
結果:
Input LocalDate UtcDate
------------------------- ----------------------- -----------------------
2007-08-08T00:01:00+01:00 2007-08-08 00:01:00.000 2007-08-07 23:01:00.000
2007-08-08T00:01:00-01:00 2007-08-08 00:01:00.000 2007-08-08 01:01:00.000
2007-08-08T00:01:00+05:30 2007-08-08 00:01:00.000 2007-08-07 18:31:00.000