Sql 当日期列数据类型为varchar2时,从表中选择前6个月记录

Sql 当日期列数据类型为varchar2时,从表中选择前6个月记录,sql,oracle,oracle12c,Sql,Oracle,Oracle12c,我想从下表中选择前6个月的结果。问题是月份字段使用“2016年12月”这种格式存储为stringVarchar2。我正在使用oracle 12c 只需转换为日期: where to_date(col, 'YYYY-MON') < date '2016-07-01' 或者,如果您想要此动态: select t.* from (select t.*, min(to_date(col, 'YYYY-MON')) over () as min_date from t ) t

我想从下表中选择前6个月的结果。问题是月份字段使用“2016年12月”这种格式存储为stringVarchar2。我正在使用oracle 12c


只需转换为日期:

where to_date(col, 'YYYY-MON') < date '2016-07-01'
或者,如果您想要此动态:

select t.*
from (select t.*, min(to_date(col, 'YYYY-MON')) over () as min_date
      from t
     ) t
where date < add_months(min_date, 6);

Gordon已经为您的情况提供了最好的技术答案,但是如果我们没有指出将日期存储为日期数据类型以外的任何数据类型是一个非常严重的设计错误,那我们就太失职了。在您的案例中,似乎设计者试图将表直接映射到一个特定报表的需要,而不是遵循合理的设计原则,然后让每个报表根据需要格式化数据。