在BigQuery标准SQL中,我需要将除法的结果用2位小数表示为百分比,例如21.23%。我能够做到这一点的唯一方法是执行以下操作:
ROUND
为小数点2位CAST
FORMAT
FORMAT('%s%%', CAST(ROUND((val_1 / val_2) * 100, 2) AS STRING))
感觉像是解决办法..。
有正确的方法吗?主要是将输出保持为浮点,而不是字符串。
谢谢!
发布于 2020-03-12 10:14:14
你的方法会奏效的。但是,我建议您创建一个温度函数。如果您要使用它几次,它将使您的代码看起来更好,更容易阅读。
语法如下:
#standardSQL
CREATE TEMP FUNCTION NUMFORMAT(number FLOAT64) AS (
CONCAT(REGEXP_EXTRACT(cast(number as string), r'\d*\.\d{2}'), ' %')
);
SELECT
NUMFORMAT(888888.999),
NUMFORMAT(123456.99),
NUMFORMAT(74185.009),
NUMFORMAT(-10.789)
注意,我假设要将数据格式化为百分位数是一个FLOAT64。不过,如果它不是FLOAT64,则可以在函数中更改它。产出如下:
如果百分位数太高,也可能要格式化数字的整数部分。语法如下:
#standardSQL
CREATE TEMP FUNCTION NUMFORMAT(number FLOAT64) AS (
#CONCAT(REPLACE(REPLACE(REGEXP_REPLACE(FORMAT("%'.2f", number), r'([\d,]+).(\d+)', r'\1=\2'), ',', '.'), '=', ','),'%')
#CONCAT(REGEXP_EXTRACT(cast(number as string), r'\d*\.\d{2}'), ' %')
CONCAT(format("%'.2f", cast(REGEXP_EXTRACT(cast(number as string), r'\d*\.\d{2}') as float64)), '%')
);
SELECT
NUMFORMAT(888888.999),
NUMFORMAT(123456.99),
NUMFORMAT(74185.009),
NUMFORMAT(-10.789)
产出如下:
发布于 2020-03-12 11:02:50
round()
不做你想做的事吗?
SELECT ROUND((val_1 / val_2), 2)
发布于 2022-02-09 23:17:07
正如尼克·温里奇所指出的那样,有一个问题的小数点不超过2位。这是我加进来的一个小问题.
CREATE TEMP FUNCTION NUMFORMAT(number FLOAT64) AS (
CONCAT(REGEXP_EXTRACT(cast(((number + 0.000001) as string), r'\d*\.\d{2}'), ' %')
);
https://stackoverflow.com/questions/60649767
复制相似问题