在PostgreSQL中向左填充零

4jb9z9bj  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(5)|浏览(328)

我是PostgreSQL的新手,我知道如何在SQL Server中向左填充一个数字,但我在PostgreSQL中很难弄清楚这一点。
我有一个数字列,其中最大位数为3,最小位数为1:如果它是一位数,它的左边有两个零,如果它是两位数,它的左边有1,例如001,058,123。
在SQL Server中,我可以使用以下命令:

RIGHT('000' + cast([Column1] as varchar(3)), 3) as [Column2]

字符串
这在PostgreSQL中不存在。任何帮助都将不胜感激。

4xy9mtcn

4xy9mtcn1#

你可以使用rpadlpad函数分别将数字填充到右边或左边。请注意,这不能直接对数字起作用,所以你必须使用::char::text来转换它们:

SELECT RPAD(numcol::text, 3, '0'), -- Zero-pads to the right up to the length of 3
       LPAD(numcol::text, 3, '0')  -- Zero-pads to the left up to the length of 3
FROM   my_table

字符串

yiytaume

yiytaume2#

to_char()函数用于格式化数字:

select to_char(column_1, 'fm000') as column_2
from some_table;

字符串
fm前缀(“填充模式”)避免了varchar中的前导空格。000只是定义了你想要的数字个数。

psql (9.3.5)
Type "help" for help.

postgres=> with sample_numbers (nr) as (
postgres(>     values (1),(11),(100)
postgres(> )
postgres-> select to_char(nr, 'fm000')
postgres-> from sample_numbers;
 to_char
---------
 001
 011
 100
(3 rows)

postgres=>


有关格式图片的更多详细信息,请参阅手册:
http://www.postgresql.org/docs/current/static/functions-formatting.html

ffdz8vbo

ffdz8vbo3#

那么容易

SELECT lpad(42::text, 4, '0')

字符串
参考文献:

sqlfiddle:http://sqlfiddle.com/#!15/d41d8/3665

rryofs0p

rryofs0p4#

最简单的方法:

ltrim(to_char(Column1, '000'))

字符串

gkn4icbw

gkn4icbw5#

我对LPADTO_CHAR很失望,因为如果你的字符串超过最小长度,它们就不工作了。我不能说这有多高效,但是你可以把FORMAT链起来,给予你一个最小长度的字符串,然后用REPLACE把所有空格替换为零。

with sample_numbers (nr) as (
    values (1),(11),(100),(1000)
)
SELECT REPLACE(FORMAT('%3s', nr), ' ', '0')
from sample_numbers;
 replace
---------
 001
 011
 100
 1000
(4 rows)

字符串
与其他方法TO_CHAR相比:

with sample_numbers (nr) as (
    values (1),(11),(100),(1000)
)
SELECT to_char(nr, 'fm000')
from sample_numbers;
 to_char
---------
 001
 011
 100
 ###
(4 rows)


(注意最后一个值是###而不是1000
LPAD

with sample_numbers (nr) as (
    values (1),(11),(100),(1000)
)
SELECT LPAD(nr::varchar(255), 3, '0')
from sample_numbers;
 lpad
------
 001
 011
 100
 100
(4 rows)


(注意最后一个值是100而不是1000
还有其他方法涉及使用CASE,但我喜欢REPLACEFORMAT组合不需要任何变量重复。

相关问题