2017-10-27 20 views
0

フラットファイルからSQL SERVER 2016にデータをインポートしようとしています。フラットファイルには、ISO 8061 UTC形式の日付データSQLサーバーでISO 8601のutc時刻を日時形式に変換する方法2016

eg: 2017-10-08T00:00:00.0000000Z 

SQL Serverでテーブルを作成するときに、datetimeとして列を作成しました。しかし、今私はこの特定の列の選択をしようとすると、それはエラーを投げている:

Expected data type: DATETIME NOT NULL, Offending value: 2017-10-08T00:00:00.0000000Z (Column Conversion Error), Error: Conversion failed when converting the NVARCHAR value '2017-10-08T00:00:00.0000000Z' to data type DATETIME. 

これを解決するためにとにかくありますか?私はSQLサーバーで以下の文を試した:

SELECT convert(datetime, DateColumnISO, 127) FROM myTable; 

これは再び同じエラーを投げた。

おかげで、 アルジュン

+0

は '2017-10-08T00されていないはずです:00:代わりに' 2017-10-の00.000Z' 08T00:00:00.0000000Z'? – SmartDev

答えて

2

あなたはdatetimeからconvertにあまりにも多くの精度を持っています。 datetime2にすべて過去ミリ秒またはconvertを取り除く次のいずれか

select convert(datetime, '2017-10-08T00:00:00.000Z' ,127) as ConvertedToDateTime 
     ,convert(datetime2,'2017-10-08T00:00:00.0000000Z',127) as ConvertedToDateTime2 

出力:

+-------------------------+------------------------------+ 
| ConvertedToDateTime |  ConvertedToDateTime2  | 
+-------------------------+------------------------------+ 
| 2017-10-08 00:00:00.000 | 2017-10-08 00:00:00.0000000 | 
+-------------------------+------------------------------+ 
+0

SQLで上記のクエリを実行しようとすると、適切なデータが得られます。ただし、実際の日付データを列名に置き換えると、次のエラーがスローされます。 列の序数:0、期待されるデータ型:DATETIME NOT NULL、不適正値:2017-10-08T00:00:00.0000000Z(列変換エラー)、エラー:NVARCHAR値 '2017-10-08T00:00:00.0000000Z'をデータ型DATETIMEに変換すると変換に失敗しました。 – Arjun

+1

はい、非常に精度の高い値を 'datetime'に変換しようとしているからです。列を 'datetime2'値に変更する必要があります。 – iamdave

関連する問題