Столбец в моей таблице содержит адреса электронной почты.
У меня есть текстовая строка, содержащая несколько имен пользователей адресов электронной почты, разделенных запятыми. Я могу сделать текстовое жало в массив, если это необходимо, чтобы заставить мое предложение SELECT WHERE работать правильно.
Аргумент поиска текстовой строки: "bob, sally, steve"
Я хочу создать предложение WHERE, которое возвращает только строки, где часть имени пользователя в адресе электронной почты в таблице соответствует одному из имен пользователей в аргументе поиска текстовой строки.
Таким образом, строка с [email protected] не будет возвращена, но [email protected] будет.
Кто-нибудь имеет образец предложения WHERE, который производит этот результат?
Спасибо.
Может быть что-то вроде
WHERE email like '%bob%' or email like '%sally%' or email like '%steve%'
Обратите внимание, что это также будет соответствовать [email protected]
. Если вы хотите только совместить стартовые символы, просто опустите ведущий %
:
WHERE email like 'bob%' or email like 'sally%' or email like 'steve%'
Если вы хотите быть более ограничительным, вы можете попробовать:
WHERE email like 'bob@%.com' or email like 'sally@%.com' or email like 'steve@%.com'
Кроме того, прочитайте в LIKE
оператор и регулярные выражения (вам не нужно это здесь, но вы, вероятно, в конечном итоге это нужно).
Следующий оператор выберет любые строки в столбце "email", где адрес начинается с "bob @". Вы бы заменили "bob" на имя пользователя, которое вы пытаетесь сопоставить.
SELECT * FROM table_name WHERE email REGEXP "^bob@"
Это будет работать для вас, но я думаю, что он будет очень медленным
WHERE SUBSTRING(email, 1, (LOCATE('@', email) - 1)) in ('steve', 'smith', .... )