flo*_*ian 5 sql google-bigquery
在 BigQuery 标准 SQL 中,我需要将除法结果表示为保留2 位小数的百分比,例如 21.23%。我能够实现这一目标的唯一方法是执行以下操作:
ROUND结果精确到小数点后两位CAST它作为一个字符串FORMAT添加百分比字符FORMAT('%s%%', CAST(ROUND((val_1 / val_2) * 100, 2) AS STRING))
感觉像是一个解决方法...
有正确的方法吗? 首先,我想将输出保留为浮点数,而不是字符串。
谢谢!
你的方法将会奏效。但是,我建议您创建一个TEMP FUNCTION。如果您要使用它几次,它将使您的代码看起来更好并且更易于阅读。
语法如下:
#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)
Run Code Online (Sandbox Code Playgroud)
请注意,我假设您想要格式化为百分位数的数据是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)
Run Code Online (Sandbox Code Playgroud)
输出将是: