2016-09-19 21 views
0

データベース表にnvarchar2という列があります。この列には、日付を表す文字列、たとえば '2016-12-05'が格納されています。oracleで無効な日付文字列を選択

有効な日付文字列を含まない行を検出する方法はありません。たとえば、'2012-19-34'


私はnullに無効な日付文字列を設定し、ステートメントを持っていると思います。

+9

を'varchar'の? – Siyual

+0

これまでに試したことを投稿してください。また、あなたの列にインデックスがありますか? 「ベスト」とは何を意味しますか?最も速く、最も読みやすい、...? – Aleksej

+0

"最高"はこれまでのところ "任意"を意味します。 @Siyualに追加する – Ferenjito

答えて

4

日付に文字列を変換しようとする機能書くことができます。

create function check_date(p_date_str in nvarchar2) return number as 
v_result NUMBER(1,0); 
v_date DATE; 
begin 
    v_result := 1; 
    begin 
    v_date := to_date(p_date_str, 'YYYY-MM-DD'); 
    exception when others then 
    v_result := 0; 
    end; 
return v_result; 
end; 
/

、その後、無効なレコードを見つけるためにそれを使用する: `date`代わりとして、それらを格納することにより

select * from my_table where check_date(column_with_date_as_str) = 0; 
関連する問題