从具有字母表的列查询日期

时间:2018-03-21 20:28:09

标签: sql oracle

我想写一个查询来获取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查询。

1 个答案:

答案 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