私は、char(8)または20090609として定義された日付フィールドと、char(4)、または1230として定義された時間フィールドを持つSQLテーブルを持っています。このデータを別のテーブルに移動しています。新しいテーブルのsmalldatetimeフィールドに入力します。私のクエリは、このようなものです:キャストしないデータはどのようにして見つけることができますか?
INSERT NewTable(eventdate)
SELECT
CAST((datecol + ' ' + substring(timecol, 1, 2) + ':' + substring(timecol, 3, 2)) as smalldatetime)
FROM OldTable
私はこれを実行すると、私はエラーを取得:
The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value.
私は、彼らがしていることを確認するために、LEN(datecol)とlen(timecol)をチェックしてみました少なくとも正しい文字数。どのように違反のあるデータや提案が見つかるか分かりません。データベースはSQL2000で、SMO 2008を使用しています。
良いアプローチは、1月から12月までの1ヶ月と1日から28日の間のチェックで、多くのエラーをフィルタリングする必要があります。 – tekBlues
私はアプローチも気に入っていますが、 "charデータ型をdatetimeデータ型の結果、範囲外のdatetime値が発生しました。 – scottm
あなたは、あなたのサブストリングがあなたのタイムコードの第2部分のためにオフであると思っています、サブストリング(timecol、3、2)でなければなりません。 – cmsjr