日期列为" YYYYMMDD"字符串 - 如何选择所有行> =过去30天?

时间:2016-06-24 10:45:19

标签: sql oracle date

我有一个包含VALID_TO列的表作为VARCHAR2。此列具有格式为" YYYYMMDD"的日期字符串,例如" 20160624"

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

我需要的是一个SELECT,它为我提供了VALID_TO日期为30天或更大的所有行。知道如何实现吗?

1 个答案:

答案 0 :(得分:1)

看起来很简单;找到30天前的日期,将其转换为相同的格式,并将其用于您的过滤器:

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

使用CTE生成40个日期的简单演示:

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 

虽然您的存储格式可以使这种搜索成为可能,但将日期存储为实际日期而不是字符串仍然更好。几乎没有停止你在那里放一个无效的值,例如20161357 ...