【问题标题】:replace() concat() and substr() add character at specific location in string cannot get the position rightreplace() concat() 和 substr() 在字符串的特定位置添加字符无法获得正确的位置
【发布时间】:2012-03-18 22:51:32
【问题描述】:

最终结果: 3 个字段都应该合并(解决 OK),并且字符“T”应该作为合并字符串的第 5 个字符添加(不应删除或更改其他字符)按顺序)。 (请参阅下面的所有细节)。

我做错了什么?

数据格式如下:

数据1: AL

数据2: 33 0230S 0440E

数据3: SW

这是我当前的 sql:

replace(concat(b.data1,
      substr(b.data2, 4, 1),
        'T',
      substr(b.data2, 1),
   b.data3), ' ', '')
AS MergedData

最终输出应如下所示:

AL33T0230S0440ESW

我已经能够将“T”放置在随机位置,但无法将其一致地添加为字符串开头的第 5 个字符。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    用途:

    • 在data2上替换only(因为这是唯一需要它的字段),然后
    • concat() 加入,最后
    • insert() 函数插入T

    (根本不使用 substr)

    insert(concat(data1, replace(data2, ' ', ''), data3), 5, 0, 'T')
    

    这是一个测试:

    set @data1 := 'AL', @data2 := '33 0230S 0440E', @data3 := 'SW';
    
    select
        insert(concat(@data1, replace(@data2, ' ', ''), @data3), 5, 0, 'T')
        as MergedData;
    

    输出:

    +-------------------+
    | MergedData        |
    +-------------------+
    | AL33T0230S0440ESW |
    +-------------------+
    

    【讨论】:

      【解决方案2】:

      随机位置看起来很奇怪,但这似乎可行;

      replace(concat(b.data1,
          substr(b.data2, 1, 2),
          'T',
          substr(b.data2, 4),
          b.data3), ' ', '')
      

      演示here.

      【讨论】:

        【解决方案3】:

        data2 中找到第一个空格的位置,将其替换为T,删除结果字符串中的其余空格,然后将其与其他两个值连接:

        CONCAT(
            b.data1,
            REPLACE(INSERT(b.data2, LOCATE(' ', b.data2), 1, 'T'), ' ', ''),
            b.data3
        ) AS MergedData
        

        【讨论】:

          猜你喜欢
          • 2017-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          • 2018-03-13
          • 2014-01-29
          相关资源
          最近更新 更多