如何在 Postgresql 中格式化数值
How to format a numeric value in Postgresql
我有一组代码可以生成一个数字,如下所示
SELECT MAX(RIGHT ("node_id",3)::numeric) + 1 as newnum from sewers.structures
WHERE(
ST_WITHIN(
ST_CENTROID((ST_SetSRID(structures.geom, 4326))),
ST_SetSRID((SELECT geom FROM sewers."Qrtr_Qrtr_Sections" WHERE "plat_page" = '510A'),4326)) ) and "node_id" != 'PRIVATE' and "node_id" !='PRIV_SAN' and "node_id" !='PRIV_STORM'
当我 运行 时,它会根据先前放置的值生成一个数字。输出将是一个最多 3 位数字的数字。我想把少于三位数的输出,强制转换成三位数的格式。
例如,如果我生成数字 93
,我想将其格式化为 093
。对于像 2
这样的单个数字也是如此,我希望它被格式化为 002
等等。但是,如果它生成一个 3 位数字,我希望它保持相同的格式,所以 121
保持为 121
.
如果我答对了你的问题,你正在寻找 lpad()
:
WITH j (x) AS (
VALUES (2),(121),(93)
)
SELECT lpad(x::text,3,'0') FROM j;
lpad
------
002
121
093
(3 rows)
由于输出将是一个字符串,您可以使用 to_char
格式为三个 0
select to_char(1,'000');
to_char
---------
001
(1 row)
我有一组代码可以生成一个数字,如下所示
SELECT MAX(RIGHT ("node_id",3)::numeric) + 1 as newnum from sewers.structures
WHERE(
ST_WITHIN(
ST_CENTROID((ST_SetSRID(structures.geom, 4326))),
ST_SetSRID((SELECT geom FROM sewers."Qrtr_Qrtr_Sections" WHERE "plat_page" = '510A'),4326)) ) and "node_id" != 'PRIVATE' and "node_id" !='PRIV_SAN' and "node_id" !='PRIV_STORM'
当我 运行 时,它会根据先前放置的值生成一个数字。输出将是一个最多 3 位数字的数字。我想把少于三位数的输出,强制转换成三位数的格式。
例如,如果我生成数字 93
,我想将其格式化为 093
。对于像 2
这样的单个数字也是如此,我希望它被格式化为 002
等等。但是,如果它生成一个 3 位数字,我希望它保持相同的格式,所以 121
保持为 121
.
如果我答对了你的问题,你正在寻找 lpad()
:
WITH j (x) AS (
VALUES (2),(121),(93)
)
SELECT lpad(x::text,3,'0') FROM j;
lpad
------
002
121
093
(3 rows)
由于输出将是一个字符串,您可以使用 to_char
格式为三个 0
select to_char(1,'000');
to_char
---------
001
(1 row)