这一点必须简单回答,但是如何将Oracle在一年内扩展到完整日期,例如
1996
到1996-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')
或任何有效的方法
答案 0 :(得分:0)
如果您以字符串开头,并希望最终得到DATE
对象,则使用TO_DATE()
函数;但是您需要提供一个虚拟月份,或者它将默认为指定年份当月的第一天:
select to_date('1996', 'YYYY') from dual;
May, 01 1996 00:00:00+0000
随着月份的推移,为了使这一天更加清晰,附加了一个合适的格式模型:
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
,但这样做没有任何好处。