0

case4 桁の年が正しいかどうかを検証するステートメントを書きたいと思っています。

たとえば、IDand DT(データ型は DATE) を選択し、日付が間違っている場合は、表示しないでください。

SELECT ID, to_char(DT,'yyyy-mm-dd hh:mm:ss') from DB_TABLE

次のようになります。

ID  DT
1   0208-03-25 12:26:00
2   2008-04-01 13:45:18
3   2000-11-15 13:45:18

私の目標は、日付が正しくない場合に日付列に null を入れるクエリを作成することです。

select ID, case when DT is not valid then null else dt from DB_TABLE

次のようになります。

ID  DT
1   null
2   2008-04-01 13:45:18
3   2000-11-15 13:45:18

何か案は?

4

2 に答える 2

2

次のようにしてみてください。

select ID,
  case
    when extract(year from DT) between 1900 and 2050
      then DT
    else null
  end as DT
from DB_TABLE;
于 2012-08-15T15:06:11.997 に答える
0

このようなもの

    select case 
       when length (to_char(extract(year from to_date('0208-03-25','YYYY-MM-DD')))) < 4 
          or extract(year from to_date('0208-03-25','YYYY-MM-DD')) not between 1800 and 2013
           then NULL           
       else to_date('0208-03-25','YYYY-MM-DD')
       end as DT
  from dual;

上記のものに並置されるように、独自の比較ロジックを定義できます。

だからあなたの質問のために-

select ID, case 
           when length (to_char(extract(year from DT))) < 4 
              or extract(year from DT) not between 1800 and 2013
               then NULL
           else DT
           end as DATE_DT
 from DB_TABLE;

< 4私が年を持っていた理由は0208、Oracle では有効な年と見なされますが、これは を使用した範囲チェックで確認できるため、 のような年の範囲がある場合は年betweenのみで問題ありません。年の範囲がない場合は、データ内の「有史前」の年を見つけるのに十分なはずです。between19002015length

于 2012-08-15T15:12:10.423 に答える