在postgreSQL中向左填充零

在postgreSQL中向左填充零,sql,postgresql,zero-padding,Sql,Postgresql,Zero Padding,我对PostgreSQL比较陌生,我知道如何在SQL Server中用左边的零填充数字,但我在PostgreSQL中很难找到答案 我有一个数字列,其中最大数字是3,最小数字是1:如果是一个数字,左边有两个零,如果是两个数字,左边有1,例如001,058,123 在SQL Server中,我可以使用以下各项: RIGHT('000' + cast([Column1] as varchar(3)), 3) as [Column2] 这在PostgreSQL中不存在。任何帮助都将不胜感激。尽可能简单

我对PostgreSQL比较陌生,我知道如何在SQL Server中用左边的零填充数字,但我在PostgreSQL中很难找到答案

我有一个数字列,其中最大数字是3,最小数字是1:如果是一个数字,左边有两个零,如果是两个数字,左边有1,例如001,058,123

在SQL Server中,我可以使用以下各项:

RIGHT('000' + cast([Column1] as varchar(3)), 3) as [Column2]
这在PostgreSQL中不存在。任何帮助都将不胜感激。

尽可能简单

SELECT lpad(42::text, 4, '0')
参考资料:

sqlfiddle:

您可以使用rpad和lpad函数分别将数字填充到右侧或左侧。请注意,这不会直接作用于数字,因此您必须使用::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
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=> 有关格式图片的更多详细信息,请参阅手册:

FWIW,看来Postgres是在9.1中添加的,我就是这样找到这个页面的。这是我的第一个谷歌搜索结果。对于SQL Server来说,可能是重复的,他们有format函数,可以让你使用formatColumn1,'000'作为Column2。@EvanCarroll这是正确的答案-你在说什么?@Yarin是带有格式字符串的标准化单函数调用方法。使用RPAD/LPAD,您将转换为字符串,然后处理字符串。使用to_char,您只是指定了一种不同的字符串化方法。@EvanCarroll它们都很有用-这一种让您为字符串长度指定一个数字-另一种需要知道“fm”代表填充模式,并让您指定一种格式pictureWARNING:与经典的printf不同,如果你的绳子不合适的话,这些骨头头的功能会悄悄地把它砍掉。所以当lengthfoo。。。如果数字太长,to_char将其转换为。O.oI我很好奇是否有解决问题的方法,如果超过to_Char中指定的长度,它将转换为。是否有具体的零最小值,然后有更大的数字从中增长?例如,如果为lpad指定3,则数字的格式为001 010 100。。1001