エラーメッセージは、bigintを日付に変換できないことを示しています。
あなたはそれを変換するためにいくつかのロジックを実行する必要があります:10として2016年12月には12102016.文字差があるだろうどこたとえば2016年4月10日のために
は4102016として格納されます。
私の推薦は次のようになります。
- バックアップデータ、どちらか私のテーブルをコピーするか、バックアップを取って。
- pkとdobを含む一時テーブルを作成します。
- 一時テーブルにvarcharカラムを追加し、それにdobsを設定します。
- すべてのdobsを元のテーブルのnullに設定します。
- 列のデータ型をdateに変更します。
- 日付を変換する正しいロジックを使用して、一時テーブルから元のテーブルの更新を実行します。
ロジックはあなたのDATEFORMATではなく、米国(YYYY/MM/DD)は次のようになりますためによって異なりだろう:
update emp_det1
set dob = case
when len(chardate) = 8
then convert(date,left(chardate,2)+'/'+substring(chardate,3,2)+'/'+right(chardate,4),101)
when len(chardate) = 7
then convert(date,'0'+left(chardate,1)+'/'+substring(chardate,2,2)+'/'+right(chardate,4),101)
from emp_det1
join #conv as conv
on emp_det1.pk = conv.pk
あなたは不適格日付を見つけるためにtry_convertsに改宗を変更することができ、コミットする前にデータが正しいかどうかを確認するために、更新前にselect文を実行することをお勧めします。
変更方法CASTまたはALTER TABLEを意味しますか?あなたのやることを私たちに教えてください。 – jarlh
@jarlh alter tableはここに私のクエリです: ALTER TABLE emp_det1 ALTER COLUMN dob date; –
新しい日付列を追加します。 UPDATEを実行して、既存のbigintの日付をコピーして新しい列に変換します。終了したら、古い列を削除します。おそらく、新しい列の名前を変更します。 (外部キー、インデックス、トリガー、ビューなどの前に依存関係をチェックする) – jarlh