将三列(年,月和日)转换为单个日期Oracle

时间:2017-06-30 07:41:40

标签: oracle date type-conversion

我有一个表格,以不同的方式保存日期,三列,一年一年,另一个月,一天另一天。因为我想使用日期比较,我需要它们作为日期格式的标准单列。 例如:

 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

我能做些什么来达到预期的效果?可能有另一种解决方案而不使用数学?

1 个答案:

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