Как использовать пользовательские переменные в предложении MySQL LIKE? - PullRequest
34 голосов
/ 16 декабря 2011

Я пытаюсь настроить несколько простых сценариев SQL, чтобы помочь с некоторым краткосрочным администрированием БД.Поэтому я настраиваю переменные, чтобы упростить повторное использование этих сценариев.

Проблема, с которой я столкнулся, связана именно с предложением LIKE.

SET @email = 'test@test.com';

SELECT email from `user` WHERE email LIKE '%@email%';

Поэтому яЯ хочу, чтобы он находил результаты на основе адреса электронной почты SET в переменной.Запрос работает, если я вручную ввожу электронное письмо в предложение LIKE.

Как мне заставить предложение LIKE работать с пользовательской переменной?

UPDATE: ответ @ dems для этого простого случая работает, но у меня возникают проблемы с более сложным запросом.

SET @email = 'test@test.com';

SELECT project.projectno, project.projectname, login.username, 
CONCAT(login.firstname, ' ', login.lastname), projectuser.title 
FROM projectuser 
INNER JOIN login ON projectuser.uid = login.uid 
LEFT JOIN project ON projectuser.pid = project.pid
WHERE login.username LIKE CONCAT ('%', @email, '%')

Дает мне ошибку "FUNCTION mydb.CONCAT не существует"

Запрос работает без CONCAT ():

SET @email = 'test@test.com';

SELECT project.projectno, project.projectname, login.username, 
CONCAT(login.firstname, ' ', login.lastname), projectuser.title 
FROM projectuser 
INNER JOIN login ON projectuser.uid = login.uid 
LEFT JOIN project ON projectuser.pid = project.pid
WHERE login.username LIKE @email

Ответы [ 7 ]

75 голосов
/ 16 декабря 2011
SET @email = 'test@test.com';

SELECT email from `user` WHERE email LIKE CONCAT('%', @email, '%');
2 голосов
/ 22 ноября 2015

Работает без concat ():

LIKE '%{$var}%'

(Mysql версия 5. +)

1 голос
/ 29 марта 2018

Не нужно CONCAT, просто используйте «%» + переменная + «%»

SET @email = 'test@test.com';

ВЫБРАТЬ электронную почту из user ГДЕ электронная почта НРАВИТСЯ '%' + @email + '%';

0 голосов
/ 15 февраля 2019
BEGIN 
    SET @emailid = CONCAT('%', 'email@email.com' ,'%');
    SET @t1 =CONCAT('SELECT * FROM user WHERE email LIKE ''', @emailid, '''');
    PREPARE stmt3 FROM @t1;
    EXECUTE stmt3;
    DEALLOCATE PREPARE stmt3;
END
0 голосов
/ 06 октября 2017

Я решил использовать функцию CONCAT перед использованием оператора LIKE:

SET @email = 'test@test.com';
set @email = CONCAT('%',@email,'%');
SELECT email from `user` WHERE email LIKE @email;

У меня отлично работает

0 голосов
/ 09 июня 2016

У вас может быть ошибка

Error Code: 1267. Illegal mix of collations for operation 'like'    0.016 sec

В этом случае вам нужно указать то же сопоставление, что и для вашей таблицы:

SET @email = 'test@test.com' COLLATE utf8_unicode_ci;
0 голосов
/ 21 августа 2015

Использование того же синтаксиса, что и в Oracle, похоже, работает:

SELECT email from user WHERE email LIKE '%' || @email || '%';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...