我有一个包含VALID_TO
列的表作为VARCHAR2。此列具有格式为" YYYYMMDD"的日期字符串,例如" 20160624"
ID ARTICLE_NUMBER STORE_ID COUNTRY VALID_TO ---------------------------------------------------------------- 100 111 22 AT 20160624 ...
我需要的是一个SELECT,它为我提供了VALID_TO
日期为30天或更大的所有行。知道如何实现吗?
答案 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 ...