在Postgresql中缺少月和日

时间:2016-03-08 16:26:12

标签: postgresql

我有日期值,几个日期已完成(格式:yyyy-mm-dd但是作为文本,而不是日期格式),但很少有日期缺少月份和缺少日期值, 现在我将不得不添加缺少的月份和日期。示例:如果缺少日期,则必须将该月的第一天添加到日期中,如果缺少月份和日期,则必须将jan的第1个添加到年份部分,在sql中我能够简单地连接数字如下:

CASE  WHEN LENGTH(<t>1.CMSTDT) = 4  THEN TO_DATE(<t>1.CMSTDT ||'-01-01','YYYY-MM-DD')  
WHEN LENgTH(<t>1.CMSTDT) = 7  THEN TO_DATE(<t>1.CMSTDT ||'-01','YYYY-MM-DD')  
ELSE TO_DATE(SUBSTR(<t>1.CMSTDTC\,1,10),'YYYY-MM-DD') END

现在类似的连接必须在POSTGRESQL中完成,我尝试使用CAST和to_char以及其他一些函数,但是我无法连接这些值,任何人都可以帮我解决这个问题。我对POSTGRESQL很新,我不知道在这种情况下使用哪种功能。

是的,1.CMSTDT是一个日期部分,用于SQL而不是POSTgresql,我的结果必须如下所示:

Actual Values   Results 
2014-06         2014-06-01
1998-08         1998-08-01
1986            1986-01-01

1 个答案:

答案 0 :(得分:0)

<强> SQL Fiddle Demo

我创建了包含预期结果的表,以查看是否在CASE

之后匹配
SELECT 
       "Values",
       "Results",
       CASE WHEN char_length("Values") > 8 THEN TO_DATE("Values", 'YYYY-MM-DD')
            WHEN char_length("Values") > 5 THEN TO_DATE("Values" || '-01', 'YYYY-MM-DD')
            ELSE TO_DATE("Values" || '-01-01', 'YYYY-MM-DD')
       END as "Result1"
FROM Table1            

<强>输出

|     Values |                   Results |                   Result1 |
|------------|---------------------------|---------------------------|
| 2014-06-01 |    June, 01 2014 00:00:00 |    June, 01 2014 00:00:00 |
|    1998-08 |  August, 01 1998 00:00:00 |  August, 01 1998 00:00:00 |
|       1986 | January, 01 1986 00:00:00 | January, 01 1986 00:00:00 |