replace () concat () и substr () добавить символ в определенном месте в строке не может получить правильную позицию - PullRequest
1 голос
/ 19 марта 2012

Конечный результат: все 3 поля должны быть объединены (решено ОК), и символ "T" должен быть добавлен как 5-й символ в объединенной строке (никакие другие символы не должны быть удалены или изменены в последовательность). (см. все особенности ниже).

Что я делаю не так?

Данные в следующем формате:

data1: AL

data2: 33 0230S 0440E

data3: SW

Вот мой текущий sql:

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

Окончательный результат должен выглядеть следующим образом:

AL33T0230S0440ESW

Мне удалось разместить букву «Т» в случайных местах, но я не могу последовательно добавить ее в качестве 5-го символа в начале строки.

Ответы [ 3 ]

2 голосов
/ 19 марта 2012

Использование:

  • заменить только на data2 (потому что это единственное поле, которое нуждается в этом), затем
  • 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 голосов
/ 19 марта 2012

Случайные местоположения кажутся странными, это, кажется, работает;

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

Демо здесь .

0 голосов
/ 19 марта 2012

Найдите позицию первого пробела в data2, замените ее на T, удалите оставшиеся пробелы в результирующей строке, затем объедините ее с двумя другими значениями:

CONCAT(
    b.data1,
    REPLACE(INSERT(b.data2, LOCATE(' ', b.data2), 1, 'T'), ' ', ''),
    b.data3
) AS MergedData
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...