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

Posted

技术标签:

【中文标题】PostgreSQL在转换后将字符误解为数字【英文标题】:PostgreSQL misinterpreting characters as numbers after casting 【发布时间】:2016-12-06 17:26:47 【问题描述】:

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

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,但它会返回类似2016December1721395anuar12016May17211181une

问题似乎在于从 12 月到 1 月的转变的逻辑。是什么原因造成的?

【问题讨论】:

【参考方案1】:

select to_char(now(),'January'); 返回类似 2457729anuar6 的内容,因为

J - 儒略日(自 4714 年 11 月 24 日 UTC 午夜以来的整数天) . Y - 年份的最后一位

Link.

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

【讨论】:

以上是关于PostgreSQL在转换后将字符误解为数字的主要内容,如果未能解决你的问题,请参考以下文章

c语言2 从键盘输入一个数字形式的字符串, 将其转换为相应的数字并输出. 例如输入的字符串是"123", 转换后将

Postgresql/Greenplum中将数字转换为字符串TO_CHAR函数前面会多出一个空格

将数字字符串转换为不同的区域格式

在LUA中将数组转换为字符串

postgresql 将数字转换为日期和格式

将 oracle 转换为 PostgreSQL 时出现数字溢出