我想写一个查询来获取oracle中的日期范围。但问题是列包含带有日期值的前缀 例如(AA 2018-02-01)
Table
Id column1 column2
1 XX AA 2018-01-02
2 YY BB 2018-02-01
3 ZZ CC 2018-03-01
4 XZ DD 2018-04-01
我想获取日期范围jan to march的数据。 我想使用select查询而不是使用pl / sql查询。
答案 0 :(得分:3)
with testdata as
(select 'XX' column1, 'AA 2018-01-02' column2 from dual union all
select 'YY' column1, 'BB 2018-02-01' column2 from dual union all
select 'ZZ' column1, 'CC 2018-03-01' column2 from dual union all
select 'XZ' column1, 'DD 2018-04-01' column2 from dual)
select column1,
column2,
to_date(substr(column2,4),'YYYY-MM-DD') date_column
from testdata;
您所要做的就是使用与to_date结合使用的substr,使用与数据匹配的日期格式字符串。运行上述查询会产生以下结果:
column1 column2 date_column
XX AA 2018-01-02 02-JAN-18
YY BB 2018-02-01 01-FEB-18
ZZ CC 2018-03-01 01-MAR-18
XZ DD 2018-04-01 01-APR-18
如果你只想限制到1月到3月,你可以这样做:
select column1,
column2,
to_date(substr(column2,4),'YYYY-MM-DD') date_column,
extract(month from to_date(substr(column2,4),'YYYY-MM-DD')) date_month
from testdata
where extract(month from to_date(substr(column2,4),'YYYY-MM-DD')) between 1 and 3;
结果:
column1 column2 date_column date_month
XX AA 2018-01-02 02-JAN-18 1
YY BB 2018-02-01 01-FEB-18 2
ZZ CC 2018-03-01 01-MAR-18 3