Mam takiego stringa:
Kod
xxxx|1234|yyyy|
i chciałbym aby wynik końcowy był taki:
Kod
xxxx yyyy|1234||
Zdaję sobie sprawę, że to będzie działanie dwuczęściowe: znalezienie stringa i skopiowanie go w odpowiednie miejsce, albo i trzyczęściowe: znalezienie stringa, znalezienie miejsca do skopiowania i skopiowanie w to miejsce).
W celu dokonania pierwszej części znalazłem poniższy kod:
SELECT SUBSTR(Adresat, LOCATE('|', Adresat)+1, (char_length(Adresat) - LOCATE('|', REVERSE(Adresat)) - LOCATE('|', Adresat))) FROM ibank.Adresat WHERE id=107479
Jednak wynik tego kodu to:
Kod
1234|yyyy
Wybrane zostało wszystko pomiędzy zewnętrznymi separatorami. Nie wiem jak zrobić, żeby wybrać tylko string między drugim i ostatnim separatorem?
Pewnie jeśli ogarnę to to będę mógł wybrać tekst od zera do pierwszego separatora i dokleić skopiowany.
Jakby ktoś miał jakiś pomysł to z góry dziękuję.
ROZWIĄZANIE (może komuś się przyda)
Kod
SELECT Adresat,
CONCAT(
SUBSTRING(Adresat, 1, LOCATE('|', Adresat) - 1),
" ",
SUBSTRING(Adresat, LOCATE('|', Adresat, (LOCATE('|', Adresat) + 1)) + 1),
SUBSTRING(Adresat, LOCATE('|', Adresat), LOCATE('|', Adresat, (LOCATE('|', Adresat) + 1)) - (LOCATE('|', Adresat) - 1))
)
FROM ibank.Adresat WHERE id=107479
CONCAT(
SUBSTRING(Adresat, 1, LOCATE('|', Adresat) - 1),
" ",
SUBSTRING(Adresat, LOCATE('|', Adresat, (LOCATE('|', Adresat) + 1)) + 1),
SUBSTRING(Adresat, LOCATE('|', Adresat), LOCATE('|', Adresat, (LOCATE('|', Adresat) + 1)) - (LOCATE('|', Adresat) - 1))
)
FROM ibank.Adresat WHERE id=107479