在 postgreSQL 中向左填充零
Posted
技术标签:
【中文标题】在 postgreSQL 中向左填充零【英文标题】:Padding zeros to the left in postgreSQL 【发布时间】:2014-12-10 08:19:42 【问题描述】:我对 PostgreSQL 比较陌生,我知道如何在 SQL Server 中用零填充一个数字,但我在 PostgreSQL 中很难解决这个问题。
我有一个数字列,其中最大位数为 3,最小值为 1:如果是一位数,则左侧有两个零,如果是两位数,则为 1,例如001、058、123。
在 SQL Server 中,我可以使用以下内容:
RIGHT('000' + cast([Column1] as varchar(3)), 3) as [Column2]
这在 PostgreSQL 中不存在。任何帮助将不胜感激。
【问题讨论】:
使用谷歌正是我找到这个页面的方式。这是我在 Google 上排名第一的结果。 to_char(number) function in postgres的可能重复 说到SQL Server,他们有format()
功能,可以让你使用format(Column1,'000') as Column2
。
【参考方案1】:
很简单
SELECT lpad(42::text, 4, '0')
参考资料:
http://www.postgresql.org/docs/current/static/functions-string.htmlsqlfiddle:http://sqlfiddle.com/#!15/d41d8/3665
【讨论】:
FWIW,看起来 Postgres 在 9.1 中添加了right()
【参考方案2】:
您可以使用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
【讨论】:
@EvanCarroll 这是正确的答案——你在说什么? @Yarin this answer 是带有格式字符串的标准化函数调用方法。使用 RPAD/LPAD,您将转换为字符串,然后处理字符串。使用 to_char,您只是指定了一种不同的字符串化方法。 @EvanCarroll 它们都很有用 - 这个可以让您指定字符串长度的数字 - 另一个需要知道“fm”代表填充模式并让您指定格式图片 警告:与经典的printf
不同,如果您的字符串不合适,这些笨拙的函数会默默地将您的字符串剪裁到合适的大小。所以你可能需要一个case when length(foo) ...
。【参考方案3】:
to_char()
函数用于格式化数字:
select to_char(column_1, 'fm000') as column_2
from some_table;
fm
前缀(“填充模式”)避免了生成的 varchar 中的前导空格。 000
只是定义了你想要的位数。
更多格式图片请看说明书:http://www.postgresql.org/docs/current/static/functions-formatting.html
【讨论】:
如果数字太长,to_char
将其转换为###。 O.o
我很好奇是否有解决方案,如果 # 如果比 to_Char 中指定的时间长,它会转换为 ###。无论如何要指定最小的零个数,然后从中增长更大的数字吗?例如,如果您为 lpad 指定 3,则数字将被格式化为 001 010 100 .. 1001【参考方案4】:
最简单的方法:
ltrim(to_char(Column1, '000'))
【讨论】:
以上是关于在 postgreSQL 中向左填充零的主要内容,如果未能解决你的问题,请参考以下文章
MySQL向左,PostgreSQL向右:平安科技在金融应用的技术选型