【问题标题】:Manipulate strings on MySQL database在 MySQL 数据库上操作字符串
【发布时间】:2020-03-14 17:46:09
【问题描述】:

我有这些字符串:X322-1-381128X322-1-383128

我需要操作这些字符串以获得输出:

X322138128X322138328

我试过这个解决方案没有成功,因为输出只有:X322138128

你能帮帮我吗?

mysql> SELECT
    'X322-1-381128' string,
    SUBSTRING_INDEX('X322-1-381128', '-', 1) a,
    SUBSTRING('X322-1-381128', 6, 1) b,
    SUBSTRING('X322-1-381128', 8, 2) c,
    SUBSTRING('X322-1-381128' ,- 3) d,
    CONCAT(
        SUBSTRING_INDEX('X322-1-381128', '-', 1),
        SUBSTRING('X322-1-381128', 6, 1),
        SUBSTRING('X322-1-381128', 8, 2),
        SUBSTRING('X322-1-381128' ,- 3)
    ) output,
    'X322-1-383128' string,
    SUBSTRING_INDEX('X322-1-381128', '-', 1) a,
    SUBSTRING('X322-1-381128', 6, 1) b,
    SUBSTRING('X322-1-381128', 8, 2) c,
    SUBSTRING('X322-1-381128' ,- 3) d,
    CONCAT(
        SUBSTRING_INDEX('X322-1-383128', '-', 1),
        SUBSTRING('X322-1-383128', 6, 1),
        SUBSTRING('X322-1-383128', 8, 2),
        SUBSTRING('X322-1-383128' ,- 3)
    ) output;
+---------------+------+---+----+-----+------------+---------------+------+---+----+-----+------------+
| string        | a    | b | c  | d   | output     | string        | a    | b | c  | d   | output     |
+---------------+------+---+----+-----+------------+---------------+------+---+----+-----+------------+
| X322-1-381128 | X322 | 1 | 38 | 128 | X322138128 | X322-1-383128 | X322 | 1 | 38 | 128 | X322138128 |
+---------------+------+---+----+-----+------------+---------------+------+---+----+-----+------------+
1 row in set

【问题讨论】:

    标签: mysql string manipulate


    【解决方案1】:

    使用 替换('X322-1-381128','-')

    【讨论】:

    • 选择替换('X322-1-381128','-','')
    • 感谢回复,但输出必须包含10个字符,而输入是11个字符,仅替换是不够的
    【解决方案2】:

    看起来您的最后一个SUBSTRING 是错误的。您想删除所有- 和倒数第三个数字:

    SELECT
      'X322-1-381128' string,
      SUBSTRING_INDEX('X322-1-381128', '-', 1) a,
      SUBSTRING('X322-1-381128', 6, 1) b,
      SUBSTRING('X322-1-381128', 8, 2) c,
      CONCAT(SUBSTRING('X322-1-381128' ,-4,1), SUBSTRING('X322-1-381128' ,-2)) d,
      CONCAT(
        SUBSTRING_INDEX('X322-1-381128', '-', 1),
        SUBSTRING('X322-1-381128', 6, 1),
        SUBSTRING('X322-1-381128', 8, 2),
        SUBSTRING('X322-1-381128' ,- 3)
      ) output,
    
      'X322-1-383128' string,
      SUBSTRING_INDEX('X322-1-383128', '-', 1) a,
      SUBSTRING('X322-1-383128', 6, 1) b,
      SUBSTRING('X322-1-383128', 8, 2) c,
      CONCAT(SUBSTRING('X322-1-383128' ,-4,1), SUBSTRING('X322-1-383128' ,-2)) d,
      CONCAT(
        SUBSTRING_INDEX('X322-1-383128', '-', 1),
        SUBSTRING('X322-1-383128', 6, 1),
        SUBSTRING('X322-1-383128', 8, 2),
        SUBSTRING('X322-1-383128' ,-4,1),
        SUBSTRING('X322-1-383128' ,-2)
      ) output;
    

    由于您的字符串操作非常静态,您还可以使用以下更简单的解决方案:

    SELECT 'X322-1-381128' string,
      CONCAT(LEFT(REPLACE('X322-1-381128', '-', ''), 8), RIGHT(REPLACE('X322-1-381128', '-', ''), 2))
    UNION ALL
    SELECT 'X322-1-383128' string,
      CONCAT(LEFT(REPLACE('X322-1-383128', '-', ''), 8), RIGHT(REPLACE('X322-1-383128', '-', ''), 2))
    

    demo on dbfiddle.uk

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-10
      • 2020-11-30
      • 1970-01-01
      • 2013-12-01
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多