1

如何使用 psql 格式化查询的输出以显示以百万为单位的值(即附加的“百万”。例如: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

关于该主题,我所能找到的只是用于将数字/日期转换为字符串的数据格式化函数,反之亦然: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。

4

1 回答 1

1

没有任何构建功能可用于您的目的。您应该编写自己的自定义函数:

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)
于 2021-01-13T05:14:41.653 回答