SQL 在字符串中的数字左侧填充 0

SQL padding 0 to the left of a number in string

我是 SQL 语言的初学者,我正在使用 postgre sql 并做一些小练习来学习。我有一个名为 acronym 的字符串列,来自目的地 table:

 DO1
 ES1
 ES2
 FR1
 FR10
 FR2
 FR3
 FR4
 FR5
 FR6
 FR7
 FR8
 FR9
 GP1
 GP2
 IN1
 IN2
 MU1
 RU1
 TR1
 UA1

我想为只有一个数字的首字母缩略词数字添加一个填充零,输出:

 DO01
 ES01
 ES02
 FR01
 FR02
 FR03
 FR04
 FR05
 FR06
 FR07
 FR08
 FR09
 FR10
 GP01
 GP02
 IN01
 IN02
 MU01
 RU01
 TR01
 UA01

如何到达字符串中第一个数字的左侧?我认为有一些正则表达式,但我没有弄清楚

您可以使用 rpad() 函数将字符添加到值的 end:

select rpad(col, '0', 4)

不过,在您的情况下,您需要一个介于两者之间的值。简单的方法是——假设前两个字符是字符串——是:

(case when length(col) = 3
      then left(col, 2) || '0' || right(col, 1)
      else col
 end)

另一种可能性是使用 regexp_replace():

regexp_replace(col, '^([^0-9]{2})([0-9])$', '')

这两个都是假设要填充的字符串是三个字符,和你的数据是一致的。其他长度不清楚你想要什么。

试试下面的方法:

to_char() 函数

select to_char(column1, 'fm000') as column2
from Test_table;

fm "fill mode"prefix 避免在生成的 var char 中出现前导空格。 000 它定义了您想要的位数。

您可以使用字符串函数,例如 lpad()substr()left():

select 
  concat(left(columnname, 2), lpad(substr(columnname, 3), 2, '0')) result
from tablename

参见demo
结果:

| result |
| ------ |
| DO01   |
| ES01   |
| ES02   |
| FR01   |
| FR10   |
| FR02   |
| FR03   |
| FR04   |
| FR05   |
| FR06   |
| FR07   |
| FR08   |
| FR09   |
| GP01   |
| GP02   |
| IN01   |
| IN02   |
| MU01   |
| RU01   |
| TR01   |
| UA01   |