2017-05-23 13 views
0

私が見つけたすべてを試しましたが(CASTCONVERT、インポート時に変換してデフォルト言語設定をチェックしています)、VARCHARの値をDATETIMEに変換するための解決策が見つかりません。私はこのフィールドの変換を新しいテーブルに挿入したいのですが、そのカラムはDATETIMEとして設定されています。CONVERTがVARCHARからDATETIMEに対応していません

私は実行すると:

SELECT CONVERT(VARCHAR, [first air date], 121) 
FROM mytable 

結果は罰金やエラーのない返されます。私が実行したときただし、:

INSERT INTO newtable 
    SELECT ID, column1, column2, 
      CONVERT(VARCHAR, [first air date], 121) 
    FROM mytable 

私はこのエラーを取得する:

Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. The statement has been terminated.

は、なぜ私が(最初のクエリのように)の結果を取得していますが、それは別のテーブルに挿入していないのだろうか?

データは次のようになります: '2004-02-23 00:00:00.000'(ダッシュはベストプラクティスではありませんが、このフォーマットは他の同僚によって決定されているため、 。

.csvでデータをインポートしていますが、この列はExcelで日付形式として設定されています。

訂正 私は今それがCONVERT(DATETIME、[最初の放送日]、121)であるはずです。しかし、これは現時点での実際の問題を解決するものではなく、VARCHARからDATETIMEに「範囲外」エラーなしで変換しています。

答えて

3

まず、変換のためにvarcharの長さを指定します。次に、実際に宛先タイプであるDATETIMEに変換します。

第三に、あなたが使用した非転換の値を取得することができます:

SELECT [first air date] 
FROM mytable 
WHERE TRY_CONVERT(DATETIME, [first air date], 121) IS NULL 

その後、変換できない値を処理する方法を見つけ出すことができます。

+0

すばらしい答えをいただきありがとうございました!しかし、この提案されたクエリを実行すると、NULLの行だけが返されます。 NULL値はないはずですか? SELECT文を実行すると(変換されたデータをINSERTしようとしたときに、NULLをNULLとして表示します)、なぜ動作しませんか? – CShrad

+0

これらの値は 'NULL'、SQL値、' 'NULL''は文字列ですか? –

+0

実際のNULLではなく、文字列 – CShrad

関連する問題