我有日期值,几个日期已完成(格式: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
答案 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 |