【问题标题】:generate date out of multiple columns从多列中生成日期
【发布时间】:2011-05-19 08:43:28
【问题描述】:

我有一个 (Postgre)SQL 表,其中日期是这样存储的

YEAR    B-MONTH    E-MONTH
2000      01         05
2004      03         06
2010      07         12
2004      01         12

如何将这些转换为“真实”日期字段?我希望输出看起来像这样:

  BEGIN          END
2000-01-01    2000-05-31
2004-03-01    2004-06-30
2010-07-01    2010-12-31
2004-01-01    2004-12-31

提前谢谢你!

[解决方案]

这是我最终得到的解决方案:

开始

TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("B-MONTH", 'FM00') || '01', 'YYYYMMDD') AS BEGIN

结束

CAST(TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("E-MONTH", 'FM00') || '01', 'YYYYMMDD') + INTERVAL ('1 MONTH - 1 DAY') AS DATE) AS END

[编辑]

它也是这样工作的:

开始

TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("B-MONTH", 'FM00'), 'YYYYMM') AS BEGIN

结束

CAST(TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("E-MONTH", 'FM00'), 'YYYYMM') + INTERVAL ('1 MONTH - 1 DAY') AS DATE) AS END

【问题讨论】:

  • 请贴出你目前写的代码。人们通常不喜欢只为您编写代码。事实上,这是一个工作描述,而不是一个问题。
  • 感谢您的建议。我真的不知道如何开始,因为我不知道将整数值转换为日期部分的函数。但是请不要像我希望你为我编写整个事情一样阅读我的问题。如果有人向我指出一个有用的功能,我会很高兴。

标签: sql postgresql date


【解决方案1】:

您需要先将整数值转换为 char,然后再转换为日期,例如:

to_date(to_char(b_month, '00') || to_char(YEAR,'9999'), 'MMYYYY') as START_DATE

对于返回日期结束的第二列,不确定对于 POSTGRESQL 是否存在返回当月最后一天作为 ORACLE 函数LAST_DAY 的现有函数,所以这里是 Oracle 下的示例:

last_day(to_date(to_char(e_month, '00') || to_char(YEAR,'9999'), 'MMYYYY')) as END_DATE

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多