如何在字符串中插入零?
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。
尝试将 LPAD
与 SUBSTR
一起使用:
SELECT
col,
SUBSTR(col, 1, 1) || LPAD(SUBSTR(col, 2), 4, '0') AS col_padded
FROM yourTable;
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 的差异。
我有一个字符串,例如 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。
尝试将 LPAD
与 SUBSTR
一起使用:
SELECT
col,
SUBSTR(col, 1, 1) || LPAD(SUBSTR(col, 2), 4, '0') AS col_padded
FROM yourTable;
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 的差异。