我有一个表格,以不同的方式保存日期,三列,一年一年,另一个月,一天另一天。因为我想使用日期比较,我需要它们作为日期格式的标准单列。 例如:
YEAR | MONTH | DAY
+-----+-------+-----+
2011 | 01 | 01
想要的结果是以yyyy-mm-dd
格式提供日期。到目前为止,我已经搜索并找到了一些解决方案,但我无法使它们工作 - First在Oracle中不起作用,其次是更多数学解决方案:
select (2011-1900)*10000 +1*100 +1 (date) from dual;
给出错误:ORA-00936: missing expression
我能做些什么来达到预期的效果?可能有另一种解决方案而不使用数学?
答案 0 :(得分:4)
您不应该以日期格式为目标,而是以日期类型为目标。格式只是在显示器上呈现此类日期的一种方式,但日期类型最容易在日期计算和比较中使用。
因此,假设您的三列是字符串类型,并且在示例中总是有填充的零(即1月为01
而不是1
),您可以这样做:
select to_date(year || month || day, 'YYYYMMDD') from dual
如果您的列是数字:
select to_date(to_char(year, 'FM0000') || to_char(month, 'FM00')
|| to_char(day, 'FM00'), 'YYYYMMDD') from dual
如果您确实需要直接从三个值计算的文本格式:
select year || '-' || month || '-' || day from dual
同样,如果您的列是数字:
select to_char(year, 'FM0000') || '-' || to_char(month, 'FM00')
|| '-' || to_char(day, 'FM00') from dual