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)