Mysql replace()concat()和substr()在字符串中的特定位置添加字符无法获得正确的位置

Mysql replace()concat()和substr()在字符串中的特定位置添加字符无法获得正确的位置,mysql,sql,Mysql,Sql,最终结果:应合并所有3个字段(确定),并将字符“T”添加为合并字符串中的第5个字符(不应删除或按顺序更改其他字符)。(请参阅下面的所有细节) 我做错了什么 数据采用以下格式: replace(concat(b.data1, substr(b.data2, 4, 1), 'T', substr(b.data2, 1), b.data3), ' ', '') AS MergedData AL33T0230S0440ESW 数据1:AL 数据2:33 0

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

我做错了什么

数据采用以下格式:

replace(concat(b.data1,
      substr(b.data2, 4, 1),
        'T',
      substr(b.data2, 1),
   b.data3), ' ', '')
AS MergedData
AL33T0230S0440ESW 数据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 最终输出应如下所示:

replace(concat(b.data1,
      substr(b.data2, 4, 1),
        'T',
      substr(b.data2, 1),
   b.data3), ' ', '')
AS MergedData
AL33T0230S0440ESW AL33T0230S0440ESW
我已经能够将“T”放置在随机位置,但无法将其作为字符串开头的第5个字符持续添加。

随机位置似乎很奇怪,但这似乎可行

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

演示。

随机位置似乎很奇怪,但这似乎有效

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

使用:

  • 仅在data2上替换(因为这是唯一需要它的字段),然后
  • concat()将所有内容连接起来,最后
  • 插入
    T
(根本不使用substr)

这里有一个测试:

set @data1 := 'AL', @data2 := '33 0230S 0440E', @data3 := 'SW';

select
    insert(concat(@data1, replace(@data2, ' ', ''), @data3), 5, 0, 'T')
    as MergedData;
输出:

+-------------------+
| MergedData        |
+-------------------+
| AL33T0230S0440ESW |
+-------------------+
使用:

  • 仅在data2上替换(因为这是唯一需要它的字段),然后
  • concat()将所有内容连接起来,最后
  • 插入
    T
(根本不使用substr)

这里有一个测试:

set @data1 := 'AL', @data2 := '33 0230S 0440E', @data3 := 'SW';

select
    insert(concat(@data1, replace(@data2, ' ', ''), @data3), 5, 0, 'T')
    as MergedData;
输出:

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

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

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

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

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