substring_index не принимает точный префикс - PullRequest
0 голосов
/ 13 апреля 2019

У меня в таблице есть строки.Некоторые из них начинаются с https://, а некоторые начинаются с http://.Я хочу извлечь те, которые начинаются с http:// (без s).Обратите внимание, что я не хочу использовать оператор LIKE из-за другого конфликта в моем плане обработки этой строки.Поэтому, если у меня есть следующие элементы в столбце с именем mycol в mytable:

https://111.com/
https://www.222.com/en-gb/

, я делаю этот запрос:

SELECT `mytable`.`mycol`, substring_index(`mytable`.`mycol`,'http://',-1)

Я все еще получаю эти строки в результатах:

https://111.com/
https://www.222.com/en-gb/

Почему?так как мой запрос ищет http://, а не https://, почему я получаю результаты, начинающиеся с https://?В этом простом примере он не должен возвращать ничего, поскольку строка не начинается с http://

, чтобы извлечь строку

Ответы [ 3 ]

0 голосов
/ 13 апреля 2019

Вы можете добавить чек на разделитель:

SELECT `mycol`,
   IF(instr(mycol,'http://') > 0, substring_index(`mytable`.`mycol`,'http://',-1),NULL)
FROM mytable;

дБ <> демонстрация скрипки


Когда функция SUBSTRING_INDEX не может найти строку с разделителями, она возвращает исходную строку вместо NULL.

SELECT substring_index('abc','.',-1)
=>
abc
0 голосов
/ 13 апреля 2019

используйте регулярное выражение.Гораздо проще.

ВЫБЕРИТЕ mycol ИЗ mytable, ГДЕ mycol REGEXP '^ http: //.+';

0 голосов
/ 13 апреля 2019

Я хочу извлечь те, которые начинаются с http://

Если вы не хотите использовать LIKE, вы можете использовать left () :

select right(columnname, length(columnname) - 7) from tablename
where left(columnname, 7) = 'http://'

Вам не нужно знать длину строки.
Все, что вам нужно, это извлечь часть строки после первых 7 символов.
Длина этой части:

length(columnname) - 7

Так что используйте right () .

...