最终结果:所有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个字符添加。
使用:
- 在data2上仅替换(因为这是唯一需要它的字段),然后
- concat()将其全部连接起来,最后
- 插入
T
的insert()函数
(根本不使用子字符串)
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 |
+-------------------+
随机位置似乎很奇怪,但这似乎有效;
replace(concat(b.data1,
substr(b.data2, 1, 2),
'T',
substr(b.data2, 4),
b.data3), ' ', '')
在这里演示。
找到data2
中第一个空格的位置,将其替换为T
,删除结果字符串中的其余空格,然后将其与其他两个值连接:
CONCAT(
b.data1,
REPLACE(INSERT(b.data2, LOCATE(' ', b.data2), 1, 'T'), ' ', ''),
b.data3
) AS MergedData