【问题标题】:How to insert zeros into a string?如何在字符串中插入零?
【发布时间】:2019-08-09 07:43:23
【问题描述】:

我有一个字符串,例如 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。

【问题讨论】:

    标签: sql string oracle toad


    【解决方案1】:

    尝试将LPADSUBSTR 一起使用:

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

    Demo

    【讨论】:

    • @Nick 你有这种感觉很有趣,因为我通常会想到 Gordon Linoff(他经常在这个网站上打败我)。
    • 显然他们需要一个响应速度阶梯,就像他们拥有一个声誉阶梯一样 :-)
    • @Tejash----ORA-00980 我可以发誓我已经打开了新发布的问题,并且在加载时已经有一个 Gordon 答案:-P
    • 是的,Gordon 在几分之一秒内给出了高质量的答案。向你们俩致敬..
    【解决方案2】:

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

    如果两者都是,则以下内容对您有用:

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

    我们在这里所做的是,将字符串字段(示例)与只包含文本的版本连接起来,然后,我们添加一个只包含数字的版本,左填充 5 个字符,添加一个0 表示 5 岁以下。

    第一个正则表达式删除任何不是字符的内容,后者删除任何不是数字的内容,以便您可以填充并重新组合在一起。

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

    这是一种“快速而肮脏”的修复,但是,据我了解,确实符合您设定的标准 = )

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多