如何在字符串中插入零?

How to insert zeros into a string?

我有一个字符串,例如 X1。我需要通过在其中插入零来创建一个新字符串。更具体地说:

for X1 the new string will be X0001;
for X10 the new string will be X0010;
for X100 the new string will be X0100;
for X1000 the new string will be X1000.


The length of the new string is 5.

我试过这样做:

select substr('X1', 1, 1) || '000' || substr('X1', 2) from dual;

但这只解决了第一种情况并返回 X0001。

尝试将 LPADSUBSTR 一起使用:

SELECT
    col,
    SUBSTR(col, 1, 1) || LPAD(SUBSTR(col, 2), 4, '0') AS col_padded
FROM yourTable;

Demo

X 总是在数字之前吗? X中没有数字?

如果两者都是,则以下内容适合您:

SELECT 
CONCAT(REGEXP_REPLACE(`example`, '[^a-z]', ""),REGEXP_REPLACE(LPAD(`example`,5,0), '[^0-9]+', ""))
FROM `test`

我们在这里做的是,将字符串字段(示例)与仅包含文本的版本连接起来,然后,我们添加一个仅包含数字的版本,左侧填充 5 个字符,为 5 以下的任何内容添加 0。

第一个正则表达式删除任何非字符的内容,后者删除任何非数字的内容,以便您进行填充和拼接。

如果 X 包含除字母以外的任何内容,您需要调整第一个正则表达式(可以找到详细信息 here)- 如果它包含任何整数,那么这将不起作用。

这是一种 "quick and dirty" 修复,但是,据我所知,确实符合您设定的标准 = )

[编辑] 啊,看起来我被上面的打败了,它工作得很好,如果需要的话,我的代码将适用于任何给定长度的 X 的差异。