如何将整数转换为字符串并获取字符串长度

8
在我的数据库中,有一个类型为整数的字段last_id。表中包含多行数据。假设last_id的最大值为104050。现在我想知道这个整数的长度
由于这不可能,我正在尝试将其转换为字符串。
SELECT to_char(MAX(last_id),'99') FROM xxxx

我原本期望用type = text可以得到10,但实际上返回的是## type = text。 此后我将使用SELECT char_length(to_char(MAX(last_id),'99')) FROM xxx,应该会返回2... 这里出了什么问题?

原因是 to_char() 函数的 "fill mode"。使用 to_char(last_id, 'FM99') 可能会解决您的问题。 - user330315
1
你为什么要接受rjhdby的答案?我的答案更短,更好,更早,并且实际上是正确的。 - Erwin Brandstetter
@ErwinBrandstetter 您是对的,我已经修复了这个问题,因为它首先帮助解决了我的问题。 - coala
3个回答

18

整数转换为文本

SELECT length(max(last_id)::text) FROM xxx;

太好了,它完美地运行了。作为下一步,我想要做以下事情:给last_id字段添加空格,使该字段的长度为10而不是6。因此,如果它只有长度为5,我希望将其添加5个空格,如果长度为4,我希望添加6个空格。这是否可行? - coala
1
@user3387124 确定是向右还是向左填充?但请提一个新问题。这个问题是关于查找整数文本表示中的长度。 - Erwin Brandstetter

3

因为您正在处理整数,所以实际上可以直接找到数字的长度(或数字中的数字数量)。从数学上讲,一个整数的位数比该数的以10为底的对数的下取整多一。

您可以使用以下方法直接找到长度:

SELECT FLOOR(LOG(MAX(last_id))) + 1 FROM xxxx

不用说,这只适用于正整数。由于在大多数系统中,id将是正整数,因此这不会是一个很大的限制。SELECT FLOOR(LOG(MAX(abs(last_id) ))) + 1 FROM xxxx应该始终适用于数字部分,尽管可能需要添加逻辑来增加答案(以字符计数)为负数。例如:对于-1000,如此,我在此评论中的公式将给出4而不是5,因此其他答案中的字符串转换将更好地处理此情况。 - JosephDoggie

0

不要使用postgresql,但是在阅读文档后...类似这样。

从表中选择character_length(cast(last_id as varchar(20)))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接