it-swarm-pt.tech

Como usar uma variável de usuário na cláusula LIKE do MySQL?

Eu estou tentando configurar alguns scripts SQL simples para ajudar com a administração de banco de dados de curto prazo. Como tal, estou configurando variáveis ​​para tentar facilitar a reutilização desses scripts.

O problema que estou tendo é especificamente com a cláusula LIKE.

SET @email = '[email protected]';

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

Então, quero que ele encontre resultados com base no email SET na variável. A consulta funciona se eu inserir manualmente o email na cláusula LIKE.

Como posso obter a cláusula LIKE para trabalhar com a variável de usuário?

ATUALIZAÇÃO: @ Resposta do dems funciona para este caso simples, mas estou tendo problemas com uma consulta mais complexa.

SET @email = '[email protected]';

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, '%')

Dá-me o erro "FUNÇÃO mydb.CONCAT não existe"

A consulta funciona sem o CONCAT ():

SET @email = '[email protected]';

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
28
Chris
SET @email = '[email protected]';

SELECT email from `user` WHERE email LIKE CONCAT('%', @email, '%');
66
MatBailie

Funciona sem concat ():

LIKE '%{$var}%'

(Versão 5. + do Mysql)

2
Irina

Não há necessidade de usar o CONCAT '%' + Variável + '%'

SET @ email = '[email protected]';

SELECIONE email de user WHERE email LIKE '%' + @email + '%';

1
Anand Maurya

Usando a mesma sintaxe que o Oracle parece funcionar:

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

0
Sergio Castillo

Resolvi usar a função CONCAT antes de usar a instrução LIKE:

SET @email = '[email protected]';
set @email = CONCAT('%',@email,'%');
SELECT email from `user` WHERE email LIKE @email;

Isso funciona bem para mim

0
Angel Alvarez Carvajal
BEGIN 
    SET @emailid = CONCAT('%', '[email protected]' ,'%');
    SET @t1 =CONCAT('SELECT * FROM user WHERE email LIKE ''', @emailid, '''');
    PREPARE stmt3 FROM @t1;
    EXECUTE stmt3;
    DEALLOCATE PREPARE stmt3;
END
0
Amey Vartak

Você pode ter erro

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

Nesse caso, você precisa especificar o mesmo agrupamento usado para a sua tabela da seguinte maneira:

SET @email = '[email protected]' COLLATE utf8_unicode_ci;
0
Yevgeniy Afanasyev