복붙노트

[SQL] 어떻게 MySQL의 LIKE 절에서 사용자 변수를 사용하는 방법?

SQL

어떻게 MySQL의 LIKE 절에서 사용자 변수를 사용하는 방법?

좀 단기 DB 관리에 도움이 설정에 몇 가지 간단한 SQL 스크립트를 시도하고있다. 따라서, 나는 쉽게 스크립트를 재사용 할 수 있도록 노력 변수를 설정하고있다.

내가 데 문제는 LIKE 절을 구체적이다.

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

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

내가 갖고 싶어 그래서 그것은 변수의 이메일 SET를 기반으로 결과를 발견. 내가 수동으로 LIKE 절에 이메일 주소를 입력하면 쿼리가 작동합니다.

어떻게 사용자 변수 작업에 LIKE 절을받을 수 있나요?

최신 정보: @ 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, '%')

나에게 오류를 제공합니다 "기능 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

해결법

  1. ==============================

    1.

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

    2.) (CONCAT없이 작동 :

    ) (CONCAT없이 작동 :

    LIKE '%{$var}%'
    

    (MySQL 버전 5 +)

  3. ==============================

    3.+ 변수 + '%', '%'CONCAT 바로 사용할 필요가 없습니다 :

    + 변수 + '%', '%'CONCAT 바로 사용할 필요가 없습니다 :

    SET @email = 'test@test.com';
    SELECT email from `user` WHERE email LIKE '%' + @email + '%';
    
  4. ==============================

    4.오라클이 작동하는 것 같다과 동일한 구문을 사용하여 :

    오라클이 작동하는 것 같다과 동일한 구문을 사용하여 :

    LIKE '%'|| 이메일 사용자로부터 SELECT 이메일 @ 이메일 || '%';

  5. ==============================

    5.당신은 오류가있을 수 있습니다

    당신은 오류가있을 수 있습니다

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

    같은 테이블에 사용이 경우 동일한 데이터 정렬을 지정해야합니다 :

    SET @email = 'test@test.com' COLLATE utf8_unicode_ci;
    
  6. ==============================

    6.나는 문 LIKE 사용하기 전에 CONCAT 함수를 사용하여 해결 :

    나는 문 LIKE 사용하기 전에 CONCAT 함수를 사용하여 해결 :

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

    그것은 나를 위해 잘 작동합니다

  7. ==============================

    7.

    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
    
  8. from https://stackoverflow.com/questions/8537516/how-to-use-an-user-variables-in-mysql-like-clause by cc-by-sa and MIT license