2017-10-16 15 views
0

ORACLEのテーブルで6か月を超えるすべてのレコードを削除しようとしています。6ヶ月過去のレコードを削除する

私は現在、このテーブル内の文字列フォーマットは'12/21/2015 12:00:00 AM'ある

delete from table t 
where to_date(substr(t.DATE_SENT,1,10),'MM/DD/YYYY') < add_months(trunc(sysdate), -6); 

を持っています。

NOTEこれはDATETIMEで、varchar2ではないはずですが、varchar2であることがわかっていますので、今のところ回避策を見つけようとしています。

このクエリは、*多少の選択のために働くようだが、その後任意の助けをいただければ幸いSQL

Error: ORA-01830: date format picture ends before converting entire input string

でクラッシュ。

+1

データには、2015年1月1日の値があると思います。 –

+0

日付の書式が 'select * from table 'と一致しないレコードを見つけようとすると、regexp_like(date_sent、'^[[digit:]] {1,2}/[[:digit:]] {1、 2}/[[:digit:]] {4} ') 'となります。 –

答えて

3

SUBSTRの必要はありません。フォーマット上で直接TO_DATEを使用してください。

DELETE FROM t 
     WHERE TO_DATE (t.DATE_SENT, 'MM/DD/YYYY HH:MI:SS AM') < 
       ADD_MONTHS (TRUNC (SYSDATE), -6); 
+0

'HH24'と' AM'は一緒に意味をなさない。あなたは 'HH12'を意味しましたか? – MT0

+0

これは間違いでした。私はすでに変更しました。しかし、何とかデータがここの問題だと感じています。 –

+0

それはうまくいった!ありがとうございました!閉じるが十分に閉じていない。私は助けに感謝します! –

関連する問題