sql >> データベース >  >> RDS >> Oracle

Oracle DATE列に格納されている無効な(破損した)値を識別する方法

    これはかなり珍しいシナリオです(以前に似たようなものに出くわしたことがありますが)。より一般的な問題は、日付列に文字列として保持されている無効な日付を見つけることです。独自の日付バリデーターを構築することで、そのソリューションを状況に適合させることができます。

    このようなもの:

    create or replace function is_a_date 
        ( p_date in date )
        return varchar2
    is
        d date;
    begin
        d := to_date(to_char(p_date,  'SYYYYMMDDHH24MISS'),  'SYYYYMMDDHH24MISS') ;
        if d != p_date then
            return 'not a proper date';
        else
            return 'good date';
        end if;
    exception
        when others  then
            return 'not a date';
    end;
    / 
    

    これにより、日付が文字列に変換され、元に戻ります。日付キャストによってスローされた例外をキャッチします。最終製品が入力日と同じでない場合は、おそらく翻訳で何かが失われました。正直なところ、12011年の日付が文字列にうまくキャストされるかどうかはわかりません。したがって、これはベルトとブレースのアプローチです。テストデータなしでこのユーティリティを作成するのは少し注意が必要です。

    このクエリは、すべての無効な日付を識別します:

     select h.id, dump(h.bid_close_date)
     from mytable h 
     where h.bid_close_date is not null
     and is_a_date(h.bid_close_date) != 'good date';
    


    1. PostgreSQL:Unixエポックから現在までに変換する方法は?

    2. SQLの複数の列を更新する

    3. SQL ServerのIDから列の名前を取得します:COL_NAME()

    4. ビットマップ画像とテキストを保存するためにSQLiteデータベースを実装する方法は?