Hat*_*tik 0 oracle date type-conversion
我有一个以不同方式保存日期的表格,三列,一列代表年,另一列代表月,另一列代表日。因为我想使用日期比较,所以我需要它们作为日期格式的标准单列。例子:
YEAR | MONTH | DAY
+-----+-------+-----+
2011 | 01 | 01
Run Code Online (Sandbox Code Playgroud)
想要的结果是日期yyyy-mm-dd格式。到目前为止,我已经搜索并找到了一些解决方案,但我无法使它们工作 -首先在 Oracle 中不起作用,其次是更数学的解决方案:
select (2011-1900)*10000 +1*100 +1 (date) from dual;
Run Code Online (Sandbox Code Playgroud)
给出错误: ORA-00936: missing expression
我该怎么做才能达到预期的结果?不使用数学可能有另一种解决方案吗?
您不应该针对日期格式,而应该针对日期类型。格式只是在显示器上呈现此类日期的一种方式,但日期类型在日期计算和比较中最容易使用。
因此,假设您的三列是字符串类型,它们总是像您的示例中那样填充零(即一月01不是1),您可以这样做:
select to_date(year || month || day, 'YYYYMMDD') from dual
Run Code Online (Sandbox Code Playgroud)
如果您的列是数字:
select to_date(to_char(year, 'FM0000') || to_char(month, 'FM00')
|| to_char(day, 'FM00'), 'YYYYMMDD') from dual
Run Code Online (Sandbox Code Playgroud)
如果你真的需要直接从三个值计算的文本格式:
select year || '-' || month || '-' || day from dual
Run Code Online (Sandbox Code Playgroud)
同样,如果您的列是数字:
select to_char(year, 'FM0000') || '-' || to_char(month, 'FM00')
|| '-' || to_char(day, 'FM00') from dual
Run Code Online (Sandbox Code Playgroud)