你的方法是可行的。然而,我建议你创建一个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)
请注意,我假设您想要格式化为百分位的数据是
FLOAT64 类型。如果不是
FLOAT64 类型,您可以在函数中更改类型。输出结果如下图所示:
![enter image description here](https://istack.dev59.com/9szQE.webp)
如果您的百分位数太高,您可能还想格式化数字的整数部分。语法如下:
#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)
输出结果将是:
![在这里输入图片描述](https://istack.dev59.com/ReLx7.webp)