格式值 "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)
)
我的 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)
)