Oracle SQL:将年份扩展为完整日期

时间:2014-05-27 11:06:04

标签: oracle10g

这一点必须简单回答,但是如何将Oracle在一年内扩展到​​完整日期,例如

19961996-01-01 00:00:00

修改

年份的数据类型是char,我想通过将今年与字符串日期进行比较来结束,例如

1996< = '1998-31-12 12:04:35'

扩展数据以相同的数据格式扩展非常重要(因为我预先格式化了日期)

最后我需要这样的东西

WHERE ( to_date(table.year_char ,'YYYY') <= '1996-12-31 00:00:00')

或者像这样

WHERE ( to_char(to_date(table.year_char ,'YYYY')) <= '1996-12-31 00:00:00')

或任何有效的方法

1 个答案:

答案 0 :(得分:0)

如果您以字符串开头,并希望最终得到DATE对象,则使用TO_DATE()函数;但是您需要提供一个虚拟月份,或者它将默认为指定年份当月的第一天:

select to_date('1996', 'YYYY') from dual;

May, 01 1996 00:00:00+0000

SQL Fiddle

随着月份的推移,为了使这一天更加清晰,附加了一个合适的格式模型:

select to_date('1996' ||'-01-01', 'YYYY-MM-DD') from dual

January, 01 1996 00:00:00+0000

SQL Fiddle。我已经离开了这一年而'-01-01'字面上的单独和连接假设您将真正使用变量...

WHERE子句中,使用您最初显示的示例日期:

select * from dual
where to_date('1996' ||'-01-01', 'YYYY-MM-DD')
  <= to_date('1998-31-12 12:04:35', 'YYYY-DD-MM HH24:MI:SS')

或者,如果您实际上正在比较第二个示例所建议的字符串,只需将其保留为字符串,因为您希望比较的两边都是相同的数据类型,而没有任何隐式转换可能会导致您以后出现问题。幸运的是,您拥有的字符串格式为that is comparable

WHERE (table.year_char || '-01-01 00:00:00' <= '1996-12-31 00:00:00')

你可以convert it to and back from a DATE,但这样做没有任何好处。