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 |
我是 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 |