为什么 PostgreSQL 中双精度的 case 语句出错?

why case statement with double precision in postgresql error?

提问人:nnor 提问时间:6/24/2023 最后编辑:Paul T.nnor 更新时间:6/24/2023 访问量:64

问:

我在PostgreSQL中的case语句中遇到了问题。在这里,我想将月份(数字)的输出更改为文本,例如 1 月、2 月等。

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”中使用更改的数据类型,但我遇到了一个错误,该语句与双精度不匹配。

SQL PostgreSQL 大小写 精度

评论

0赞 Luuk 6/24/2023
为什么不使用:?当前返回 .(请参阅:文档SELECT to_char(current_timestamp, 'Month')June)

答:

0赞 jjanes 6/24/2023 #1

所有文本的类型都为“unknown”,让 ELSE 确定 CASE 的返回类型。但是,文字不能被解释为属于这种类型。

0赞 Luuk 6/24/2023 #2

这将返回不带 CASE 语句的月份名称:

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

请参见:DBFIDDLE,其中还显示了如何解决 CASE 语句中的问题。

和 PostgreSQL 的文档:完整的混合大小写月份名称(空白填充到 9 个字符)

注意:当您不需要 9 个字符时,您可以随时使用 rtrim()