Инверсия SQL LIKE '% value%'

У меня есть таблица MySQL, содержащая доменные имена:

+----+---------------+
| id | domain        |
+----+---------------+
|  1 | amazon.com    |
|  2 | google.com    |
|  3 | microsoft.com |
|    |     ...       |
+----+---------------+

Я хотел бы иметь возможность искать в этой таблице полное имя хоста (например, www.google.com). Если бы было наоборот, когда таблица содержала полный URL-адрес, я бы использовал:

SELECT * FROM table WHERE domain LIKE '%google.com%'

Но обратное не так однозначно. В настоящее время я думаю, что нужно искать полное имя хоста, затем постепенно удалять каждую часть домена и снова искать. (например, введите "www.google.com", затем "google.com")

Это не особенно эффективно или умно, должен быть способ получше. Я уверен, что это обычная проблема, и ее легко решить!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
5
0
6 685
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы также можете использовать столбец справа от подобного:

SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain);

или же

SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain, '%');

Это не особенно эффективно, но работает.

Добро или зло ... Оба варианта хороши.

Greg 04.12.2008 00:49

Здорово. Я думал поставить% с именем столбца, но не знал, как это объединить. Спасибо.

Mat 04.12.2008 01:08

Ой, сильно нравится. Долго искал. :) Будьте здоровы.

vantrung -cuncon 01.10.2012 21:25

Вы можете использовать небольшие манипуляции со строкой SQL, чтобы сгенерировать эквивалент string.EndsWith ():

SELECT * FROM table WHERE  
substring('www.google.com',
len('www.google.com') - len([domain]) ,
len([domain])+1) = [domain]

В mysql вы можете использовать регулярные выражения (RLIKE) для поиска совпадений. Учитывая эту способность, вы могли бы сделать что-то вроде этого:

SELECT * FROM table WHERE 'www.google.com' RLIKE domain;

Похоже, что способ реализации RLIKE даже достаточно умен, чтобы рассматривать точку в этом поле (обычно это подстановочный знак в regex) как буквальную точку.

Включение регулярных выражений в MySQL's дает вам очень мощные возможности для синтаксического анализа и поиска строк. Если вы хотите узнать больше о регулярных выражениях, просто погуглите "regex". Вы также можете использовать одну из этих ссылок:

http://en.wikipedia.org/wiki/Regular_expression

http://www.regular-expressions.info/

http://www.codeproject.com/KB/string/re.aspx

Другие вопросы по теме