【问题标题】:How to convert integer to string and get length of string如何将整数转换为字符串并获取字符串的长度
【发布时间】:2014-03-18 10:29:18
【问题描述】:

在我的数据库中有一个last_id 类型为integer 的字段。该表包含几行。假设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()函数的“填充模式”。使用to_char(last_id, 'FM99') 可能会解决您的问题。
  • 你为什么会接受 rjhdby 的回答?我的更短、更好、更早并且实际上是正确的。
  • @ErwinBrandstetter 你是对的,我现在已经解决了这个问题,因为它首先帮助解决了我的问题

标签: postgresql type-conversion


【解决方案1】:

Castinteger 值改为text

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

【讨论】:

  • 太好了,效果很好。作为下一步,我想执行以下操作:向字段 last_id 添加空格,以便该字段的长度为 10 而不是 6。因此,如果它的长度仅为 5,我想向其添加 5 个空格,如果是 4,我想加 6。可以吗?
  • @user3387124 确定,向右还是向左?但是请提出一个新问题。这是关于找出文本表示中整数的长度。
【解决方案2】:

由于您处理的是整数,因此您实际上可以直接找到数字的长度(或数字中的位数)。在数学上,一个整数的位数比该数的以 10 为底的对数的底数多 1。

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

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

【讨论】:

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

不要使用 postgresql,但在阅读文档后... Somthign like this。

从表中选择字符长度(cast(last_id as varchar(20)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2011-05-13
    • 1970-01-01
    相关资源
    最近更新 更多