格式值 "divide" 可以是 PostgreSQL 中的数字吗?

Can a format value "divide" a number in PostgreSQL?

我的 table 的其中一列的值通常在 3500 到 800 万之间。格式化的时候能不能指定一个可以除数的格式?

例如,我有以下值:

3500
81000
1678500

理想情况下,我想要一个格式值(来自另一个配置 table),它会将数字格式化为“千”,小数点后一位:

3.5
81.0
1678.5

但对于其他情况,此格式值也可能不同,因此可以将它们格式化为带两位小数的百万:

0.00
0.08
1.68

这可能吗,还是我需要在应用格式之前自己划分数字?

Is this possible, or do I need to divide the numbers myself before applying the formatting?

你需要做除法。顺便说一句,如果您没有数值来跟踪除以什么,则可以使用 CASE WHEN:

SELECT tablevalue / CASE divby WHEN 'thousand' THEN 1000 WHEN 'million' THEN 1000000 ELSE 1 END

我想你的“格式”中会有一些列 table 也指定了除以什么..


所以您不想添加列..您可以将信息存储在现有列中..您只需要做更多的工作就可以将其取出:

SELECT 
  TO_CHAR(
    somenumber / CASE RIGHT(format, 1) WHEN 'k' THEN 1000 WHEN 'M' THEN 1000000 END,
    LEFT(format, -1)
  )

所以现在您可以将格式设置为 99D99k,k 将除以 1000,结果格式为 99.99,所以如果您有 1234,格式 9.99k 你会 '1.23' 从中得到。

如果您想要 [k] 开头,只需稍微调整一下 LEFT 和 RIGHT 函数即可。

  TO_CHAR(
    somenumber / CASE LEFT(format, 3) WHEN '[k]' THEN 1000 WHEN '[M]' THEN 1000000 END,
    RIGHT(format, -3)
  )