从多列生成日期

spe*_*ndo 4 sql postgresql date

我有一个(Postgre)SQL表,其中日期存储如下

YEAR    B-MONTH    E-MONTH
2000      01         05
2004      03         06
2010      07         12
2004      01         12
Run Code Online (Sandbox Code Playgroud)

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

  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
Run Code Online (Sandbox Code Playgroud)

先感谢您!

[解]

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

开始

TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("B-MONTH", 'FM00') || '01', 'YYYYMMDD') AS BEGIN
Run Code Online (Sandbox Code Playgroud)

结束

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

[编辑]

它也是这样的:

开始

TO_DATE(TO_CHAR("YEAR", '9999') || TO_CHAR("B-MONTH", 'FM00'), 'YYYYMM') AS BEGIN
Run Code Online (Sandbox Code Playgroud)

结束

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

mch*_*cha 6

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

to_date(to_char(b_month, '00') || to_char(YEAR,'9999'), 'MMYYYY') as START_DATE
Run Code Online (Sandbox Code Playgroud)

对于返回日期结束的第二列,如果现有函数返回该月的最后一天作为ORACLE函数LAST_DAY,则不确定POSTGRESQL ,因此这是Oracle下的示例:

last_day(to_date(to_char(e_month, '00') || to_char(YEAR,'9999'), 'MMYYYY')) as END_DATE
Run Code Online (Sandbox Code Playgroud)