web-dev-qa-db-de.com

Wie verwende ich eine Benutzervariable in der LIKE-Klausel von MySQL?

Ich versuche, ein paar einfache SQL-Skripts einzurichten, um bei der kurzfristigen DB-Verwaltung zu helfen ..__ Als solches richte ich Variablen ein, um die Wiederverwendung dieser Skripts zu erleichtern.

Das Problem, das ich habe, betrifft speziell die LIKE-Klausel.

SET @email = '[email protected]';

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

Daher möchte ich, dass Ergebnisse basierend auf dem E-Mail-SET in der Variablen gefunden werden. Die Abfrage funktioniert, wenn Sie die E-Mail manuell in die LIKE-Klausel eingeben.

Wie kann ich erreichen, dass die LIKE-Klausel mit der Benutzervariable arbeitet?

UPDATE: Die Antwort von @ Dems funktioniert für diesen einfachen Fall, aber ich habe Probleme mit einer komplexeren Abfrage.

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

Gibt mir den Fehler "FUNKTION mydb.CONCAT existiert nicht"

Die Abfrage funktioniert ohne 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

Funktioniert ohne concat ():

LIKE '%{$var}%'

(Meine Version 5. +)

2
Irina

Keine Notwendigkeit für CONCAT, verwenden Sie einfach '%' + Variable + '%'

SET @email = '[email protected]';

Wähle E-Mail von user WO E-Mail LIKE '%' + @email + '%';

1
Anand Maurya

Die Verwendung derselben Syntax wie Oracle scheint zu funktionieren:

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

0
Sergio Castillo

Ich habe die Funktion CONCAT vor der Verwendung der LIKE-Anweisung aufgelöst:

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

Es funktioniert gut für mich

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

Sie haben möglicherweise einen Fehler

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

In diesem Fall müssen Sie dieselbe Kollatierung angeben, die für Ihre Tabelle verwendet wird:

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