2016-06-24 3 views
0

私はVALID_TO列をVARCHAR2として含むテーブルを持っています。この列には、 "YYYYMMDD"という形式の日付文字列があります。 "20160624"。私は必要なもの日付列は "YYYYMMDD"文字列 - すべての行を選択する方法> =過去30日間ですか?

 
ID  ARTICLE_NUMBER STORE_ID COUNTRY VALID_TO 
---------------------------------------------------------------- 
100 111    22   AT  20160624 
... 

は私に30日以上経過しているVALID_TO日付を持つすべての行を与えることSELECTです。どのようにそれを達成するためのアイデア?

+0

なぜ文字列として日付を格納していますか?少なくともあなたのフォーマットはこの種の検索を単純にしますが、まだ良い考えではありません。 –

答えて

1

かなり簡単です。 、30日前の日付を見つけると同じ形式に変換し、あなたのフィルタのためにそれを使用します。保存されたフォーマットする間に

with t42 (valid_to) as (
    select to_char(trunc(sysdate) - level, 'YYYYMMDD') from dual connect by level <= 40 
) 
select valid_to 
from t42 
where valid_to <= to_char(sysdate - 30, 'YYYYMMDD'); 

VALID_TO 
-------- 
20160525 
20160524 
20160523 
20160522 
20160521 
20160520 
20160519 
20160518 
20160517 
20160516 
20160515 

11 rows selected 

:40個の日付を生成するために、CTEを使用して

where valid_to <= to_char(sysdate - 30, 'YYYYMMDD') 

簡単なデモこの種の検索はできませんが、文字列ではなく実際の日付として日付を格納する方が良いでしょう。無効な値を入力するのをやめることはほとんどありません。 20161357 ...

関連する問題