为什么case语句在postgresql中有双精度错误?

y4ekin9u  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(2)|浏览(158)

我在PostgreSQL中遇到了case语句的问题。这里我想把月份(数字)的输出改为文本,比如January,February等

select
    date_part('month', tanggal) bulan,
    case 
         when date_part('month', tanggal)= 1 then 'January'
         when date_part('month', tanggal) = 2 then 'February'
         when date_part('month', tanggal) = 3 then 'March'
         when date_part('month', tanggal) = 4 then 'April'
         when date_part('month', tanggal) = 5 then 'May'
         when date_part('month', tanggal) = 6 then 'June'
         when date_part('month', tanggal) = 7 then 'July'
         when date_part('month', tanggal) = 8 then 'August'
         when date_part('month', tanggal) = 9 then 'September'
         when date_part('month', tanggal) = 10 then 'October'
         when date_part('month', tanggal) = 11 then 'November'
         when date_part('month', tanggal) = 12 then 'December'
         else date_part('month', tanggal)
    end as namabulan

但是,我得到的是这样一个错误

ERROR:  invalid input syntax for type double precision: "Januari"
LINE 4:    when date_part('month', tanggal)= 1 then 'Januari'
                                                    ^

我尝试在case语句'January'中使用更改的数据类型,但我得到了一个错误,该语句不匹配双精度。

6g8kf2rb

6g8kf2rb1#

这些文字都具有类型'unknown',让ELSE来确定CASE的返回类型。但是文字不能被解释为那种类型。

niknxzdl

niknxzdl2#

这将返回没有CASE语句的月份名称:

SELECT
     current_timestamp, to_char(current_timestamp,'Month') MonthName;

请参阅:DBFIDDLE,它还展示了如何修复CASE语句中的问题。
和postgresql的文档:完整的大小写混合月份名称(空白填充为9个字符)
注意:如果不需要9个字符,可以使用rtrim()

相关问题