【问题标题】:Conversion of three columns - year, month and day into a single date Oracle将三列 - 年、月和日转换为单个日期 Oracle
【发布时间】:2017-06-30 07:41:40
【问题描述】:

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

 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

我可以做些什么来达到预期的效果?不使用数学是否还有其他解决方案?

【问题讨论】:

  • 寻找TO_DATE函数
  • 你的 3 列的数据类型是什么?
  • @trincot 数据类型是所有 3 的个数
  • 您应该修复该设计并将该信息直接存储在单个 DATE 列中。
  • @a_horse_with_no_name 这不是我的设计)

标签: oracle date type-conversion


【解决方案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 

【讨论】:

  • FM000 FM00是什么意思?列以数字数据格式存储
  • documentation for Format Models 用于TO_CHAR - 它描述了0 格式模型和FM 格式模型修饰符。
猜你喜欢
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多