web-dev-qa-db-ja.com

SQLで日付変換エラーを処理する方法

したがって、SQLデータベースの文字列を日時値に変換しようとしています。

私はこのようなテーブルにいくつかの日付があります:

23/12/2013 16:34:32
24/12/2013 07:53:44
24/12/2013 09:59:57
24/12/2013 12:57:14
24/12/2013 12:48:49
24/12/2013 13:04:17
24/12/2013 13:15:47
24/12/2013 13:21:02
24/12/2013 14:01:28
24/12/2013 14:02:22
24/12/2013 14:02:51

残念ながら文字列として保存されています

そして、それらを日時に変換したい

SELECT CONVERT(datetime, analysed, 103 )
FROM OIL_SAMPLE_UPLOAD

ただし、クエリを実行するとこのメッセージが表示されます

Varcharデータ型をdatetimeデータ型に変換すると、値が範囲外になりました。

おそらくいくつかの値が正しく形成されていないためです(まだこれらのいずれかを見つけることはできませんが)

一部の値が変換されなくても問題ありません。この状況を処理する方法が必要です。

ISNULL(CONVERT(datetime、analysed、103))のようなものは、変換関数が失敗したときにNULLを返さないことを除いて良いでしょう。

12
sav

SQL Serverの場合、 ISDATE() 関数を使用して、値が有効な日付かどうかを確認できます

SELECT CASE WHEN ISDATE(analysed)=1 THEN CONVERT(datetime, analysed, 103 ) 
            ELSE '' END
FROM OIL_SAMPLE_UPLOAD
25
Mudassir Hasan

TRY_CONVERT または TRY_CAST 関数を使用できます

10
Lev Z

日付部分だけが必要な場合は、SUBSTRINGを使用して、次のように日付を計算します。これにより、少なくとも正しい日付部分が得られる可能性があります。

SELECT CONVERT(datetime, SUBSTRING(analysed, 0, 11), 103 )
FROM OIL_SAMPLE_UPLOAD
1
user2989408