2016-08-23 5 views
-1

Vertica DBには、created_tsという名前の列があります。この列には、3/15/2016、03/15/2016、2016/03/15および15/03/2016のようなレコードがあります。 DD/MM/yyyy形式に従わないレコードをフィルタリングしたい。Vertica DBで無効な日付レコードを見つける方法は?

+0

現在のクエリを表示できますか? –

+0

Teradata DBのクエリがあります。それはSYS_CALENDAR.CALENDARテーブルを持っているので、私はそのテーブルに加わり、出力を得ることができます。以下はクエリクエリのカウント(*)です(SELECT COUNT(*) からDP_VEDW_NGN.STG_SITE_CATALYST A LEFT OUTER JOIN SYS_CALENDAR.CALENDAR (CALENDAR_DATE(FORMAT 'YYYY-MM-DD')(CHAR(10)))) = A.date_time とA.date_timeがInvalid_DateとしてNULL)、されていない 'DATE_TIME' COLUMN_NAME AS DP_VEDW_NGN.STG_SITE_CATALYST – Midhun

答えて

0

これは、有効なDD/MM/YYYY日付ではない大部分の文字列を識別するはずですが、4月31日(または非英語の場合は2月29日)のような無効な日付を除外するには、うるう年)。

select * from my_table 
where not (translate(created_ts,'','9999999999')='99/99/9999' 
      and split_part(created_ts,'/',1) between '01' and '31' 
      and split_part(created_ts,'/',2) between '01' and '12') 
+0

created_tsがit.Theにタイムスタンプを持っているので、私が翻訳することができないのクエリから 'split_part(created_ts、' /」 、2) '01'と '12'の間に) 'これは値を返しません。 '01'と '31'の間の 'split_part(created_ts、'/'、2)のために働いている同じ行です。残念ながら私は無効な月記録を持っていません。 – Midhun

+0

'select * from のようなクエリを変更しました(SELECT DATE_PART( 'month'、created_ts)|| '/' || DATE_PART( 'day'、created_ts)|| '/' || DATE_PART( 'year'、created_ts )0127と12の間のsplit_part(created_ts、 '/'、1) とsplit_part(created_ts、 '/'、2)は、01と12の間のsplit_part(created_ts、 '/'、1)はからROYALTY_STG.STG_DL_FILESからA です。 '2000'と '9999'の間に31 ' とsplit_part(created_ts、'/'、3)) 'があります。月の部分は、01と12の間のレコードを取得していません。 – Midhun

関連する問題