在 PostgreSQL 中将双精度转换为文本时出现意外行为

Posted

技术标签:

【中文标题】在 PostgreSQL 中将双精度转换为文本时出现意外行为【英文标题】:Unexpected behavior when converting double precision to text in PostgreSQL 【发布时间】:2017-12-04 16:37:22 【问题描述】:

今天遇到这种奇怪的行为..

select                date_part('year', CURRENT_DATE);
2017
select        to_char(date_part('year', CURRENT_DATE),'9999');
" 2017"
select length(to_char(date_part('year', CURRENT_DATE),'9999'));
5

我当然可以直接使用to_char(CURRENT_DATE,'YYYY'),只是很好奇为什么双精度数字在转换为文本时会在开头有一个空格。 谢谢!


注意事项:

Data Type Formatting Functions (PostgreSQL 8.2.xx) 服务器版本:PostgreSQL 8.2.15(Greenplum 数据库 4.3.10.0)

【问题讨论】:

【参考方案1】:

此行为已记录在案(请参阅examples table)。它为负值的 - 符号留出了空间。

您似乎可以使用FM 前缀来避免这种情况,即'FM9999'

【讨论】:

啊,我第一次传球时没听懂。感谢您指出! @Kent 他们还写道:If no explicit provision is made for a sign in to_char()'s pattern, one column will be reserved for the sign, and it will be anchored to (appear just left of) the number. If S appears just left of some 9's, it will likewise be anchored to the number. @krokodilko - 谢谢!我看到这是在最新的 v10 文档中,而在我的文档中却没有。解释的很好

以上是关于在 PostgreSQL 中将双精度转换为文本时出现意外行为的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将字符串转换为双精度

在 vc++ 中将字符串转换为双精度

如何在Java中将浮点数组转换为双精度数组?

在 Python 中将字符串列表转换为整数(或双精度)

在 C# 中将十进制数转换为双精度数会产生差异

在 PHP 中将字符串转换为双精度