2017-06-30 25 views
0

年齢を計算する必要があります。誕生日はのようにvarchar2に保存され、誕生日が記録されていない人もいます。デフォルト値は00000000です。ここでOracle DB:文字列から年齢を計算する

は私のコードです:

SELECT 
    e.id_number, 
    e.birth_dt, 
    (CASE WHEN SUBSTR(e.birth_dt, 1, 4) = '0000' THEN 0 
      WHEN SUBSTR(e.birth_dt, 1, 4) <> '0000' THEN 
       ROUND(MONTHS_BETWEEN(SYSDATE, TO_DATE(e.birth_dt, 'YYYYMMDD'))/12) 
      ELSE -1 
    END) age 
FROM employee e 

エラーは次のとおりです。

ORA-01843:有効ではありません月

は何も悪いことですか?私は理解できませんでした。

+0

'birth_dt'カラムのサンプルデータを共有できますか?データが不良であるか、フォーマットマスクが間違っていると、エラーが説明される可能性があります。 –

+0

あなたは正しいと思います。私はいくつかのグループの人でこれを試しました。しかし、すべての人に適用されると、エラーが出てきました。多分それがあなたが言った理由です。どうもありがとうございます! – user8237908

+0

私は、どの行に無効な日付データがあるかを検出するためのクエリを考え出すことができると思います。 –

答えて

0

何か間違っていますか?はい、あなたのケースでは、一部の文字列が文字位置5と6に01,02、...、12以外の文字を含む可能性をカバーしていません。同様に、あなたのケースでは、月文字位置が01、02、... 31以外のもの(およびその月の日が特定の月に有効でない可能性のカバー)。

私はあなたでしたが、適切な日付列を追加し、両方の列にデータを入力するようにアプリケーションを修正し、不良データをテーブルに入れないようにアプリケーションを修正し、不良データをどう処理するかを決め、アプリは、varchar2列を作成して停止し、varchar2列をドロップします。

関連する問題