Как искать подстроку, которой предшествует известная подстрока - PullRequest
0 голосов
/ 25 октября 2018

Используя SQL, я хочу искать и извлекать подстроки, которым предшествует известная подстрока "XX".и заканчивается на "" или "".

Например, если я начинаю с CONTOOOH 788 XX. 3C, MNOP, мне нужно извлечь значение 3C

Я пробовал с подстрокой (input, posisiton, len) , но неуверен в критериях len, так как len различаются.

select substring(input, position("XX." in input)+4, **???**)    
from tables 
where input like '%XX.%';

Я использую MySQL.

enter image description here

Input
CONTOH LALALA 12 XX. 1 ABCD LALA NANA MAMA KAKA
CONTOH NANANANA 34 XX. 02 EFGH IJKL MN
CONTOOOH MAMAMA XX. 1A IJKL YOYO
CONTOOOH NANA XIXI 788 XX. 423C, MNOP QRSTU ASDF POIU
EXAMPLE BLA BLA HOHOHO 910 XX. A4, QRST ASDGHH
EXAMPLE ZZZ AAA BBB 1112 XX. BB5, UVWXASDGHH


Output
1
02
1A
423C
A4
BB5

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Согласно документации для подстроки MySQL

длина Необязательно .Формы без аргумента len возвращают подстроку из строки str, начиная с позиции pos.https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring

Таким образом, если ваш текущий код работает по вашему вкусу, за исключением длины, просто опустите его, и он вернет всю подстроку.

0 голосов
/ 25 октября 2018

Один вариант использует SUBSTRING_INDEX с REPLACE:

SELECT
    Input,
    REPLACE(SUBSTRING_INDEX(
        SUBSTRING_INDEX(Input, 'XX. ', -1), ' ', 1), ',', '') AS Output
FROM yourTable;

enter image description here

Демо

Вот как работают строковые операции, шаг за шагом

CONTOOOH 788 XX. 3C, MNOP    - initial input
3C, MNOP                     - after first call to SUBSTRING_INDEX
3C,                          - after second call to SUBSTRING_INDEX
3C                           - after call to REPLACE, to remove the comma
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...