PostgreSQL 在转换后将字符错误解释为数字

PostgreSQL misinterpreting characters as numbers after casting

我一直在按照示例 here 将日期转换为月份名称。但是,当我得到两个月的变化 window 时,第二个月的名称在某些字母的解释中变得支离破碎。

FISCAL_YEAR 
        || TO_CHAR(TO_TIMESTAMP(to_Char(month(DATE_VAR),'999'), 'MM'), 'Month'
        || TO_CHAR(TO_TIMESTAMP(to_Char(
        case 
            when 
                month(DATE_VAR)+1>12 then 1 
                else month(DATE_VAR)+1 end
            ,'999'), 'MM'), 'Month'))

理想的结果是 2016DecemberJanuary,但它 returns 类似于 2016December1721395anuar12016May17211181une

看来问题出在解释从 12 月到 1 月的转变的逻辑上。是什么原因造成的?

select to_char(now(),'January'); returns 类似 2457729anuar6 因为

J - Julian Day (integer days since November 24, 4714 BC at midnight UTC) .
Y - last digit of year

Link.

您需要在格式字符串中引用字符串以防止将其解释为占位符:select to_char(now(),'YY, "January"');