PostgreSQL:如何格式化查询的输出以显示 'million' 而不是零?
PostgreSQL: how do I format the output of a query to show 'million' instead of zeros?
如何使用 psql 格式化查询的输出以显示以百万为单位的值(即附加 'million'。例如:100 万而不是 1000000)?
示例:
SELECT city, population
FROM cities
WHERE state = 'California';
实际输出:
city | population
---------------+--------------------------
Los Angeles | 3990456
San Diego | 1425976
San Jose | 1030119
期望的输出:
city | population
---------------+--------------------------
Los Angeles | 3.99 million
San Diego | 1.43 million
San Jose | 1.03 million
关于该主题,我只能找到用于将 numbers/dates 转换为字符串的数据格式化函数,反之亦然:https://www.docs4dev.com/docs/en/postgre-sql/11.2/reference/functions-formatting.html
此外,to_char 函数似乎不执行这种格式设置:https://www.postgresqltutorial.com/postgresql-to_char/
在 macOS 终端上使用 psql 和 PostgreSQL 版本 13。
没有任何适合您的构建功能。您应该编写自己的自定义函数:
CREATE OR REPLACE FUNCTION format_mil(n int)
RETURNS text AS $$
BEGIN
IF n > 500000 THEN
RETURN (n / 1000000.0)::numeric(10,2) || ' million';
ELSE
RETURN n::text;
END IF;
END;
$$ LANGUAGE plpgsql;
postgres=# select format_mil(3990456);
┌──────────────┐
│ format_mil │
╞══════════════╡
│ 3.99 million │
└──────────────┘
(1 row)
但简单的 SQL 表达式也可以足够好:
CREATE TABLE cities (population int);
INSERT INTO cities VALUES(3990456);
INSERT INTO cities VALUES(1425976);
postgres=# SELECT CASE WHEN population > 500000 THEN
(population/1000000.0)::numeric(10,2) || ' million'
ELSE population::text END
FROM cities;
┌──────────────┐
│ population │
╞══════════════╡
│ 3.99 million │
│ 1.43 million │
└──────────────┘
(2 rows)
如何使用 psql 格式化查询的输出以显示以百万为单位的值(即附加 'million'。例如:100 万而不是 1000000)?
示例:
SELECT city, population
FROM cities
WHERE state = 'California';
实际输出:
city | population
---------------+--------------------------
Los Angeles | 3990456
San Diego | 1425976
San Jose | 1030119
期望的输出:
city | population
---------------+--------------------------
Los Angeles | 3.99 million
San Diego | 1.43 million
San Jose | 1.03 million
关于该主题,我只能找到用于将 numbers/dates 转换为字符串的数据格式化函数,反之亦然:https://www.docs4dev.com/docs/en/postgre-sql/11.2/reference/functions-formatting.html
此外,to_char 函数似乎不执行这种格式设置:https://www.postgresqltutorial.com/postgresql-to_char/
在 macOS 终端上使用 psql 和 PostgreSQL 版本 13。
没有任何适合您的构建功能。您应该编写自己的自定义函数:
CREATE OR REPLACE FUNCTION format_mil(n int)
RETURNS text AS $$
BEGIN
IF n > 500000 THEN
RETURN (n / 1000000.0)::numeric(10,2) || ' million';
ELSE
RETURN n::text;
END IF;
END;
$$ LANGUAGE plpgsql;
postgres=# select format_mil(3990456);
┌──────────────┐
│ format_mil │
╞══════════════╡
│ 3.99 million │
└──────────────┘
(1 row)
但简单的 SQL 表达式也可以足够好:
CREATE TABLE cities (population int);
INSERT INTO cities VALUES(3990456);
INSERT INTO cities VALUES(1425976);
postgres=# SELECT CASE WHEN population > 500000 THEN
(population/1000000.0)::numeric(10,2) || ' million'
ELSE population::text END
FROM cities;
┌──────────────┐
│ population │
╞══════════════╡
│ 3.99 million │
│ 1.43 million │
└──────────────┘
(2 rows)