Programming/SQL / / 2020. 2. 13. 18:47

[MySQL]LIKE IN 비슷하게...

728x90

칼럼 하나에서 여러 단어로 검색할 때 LIKE를 여러 번 써야 하는 수가 있습니다.

SELECT * FROM #table WHERE `column` LIKE '%aaa%' OR `column` LIKE '%bbb%` OR `column` LIKE `%ccc%'

너무 무식하게 길어집니다.

이런 때 REGEXP 연산자를 써서

SELECT * FROM #table WHERE `column` REGEXP 'aaa|bbb|ccc'

이렇게 줄여서 쓰면 됩니다.

 

반대의 경우도 있습니다.

칼럼 여러 개에 하나의 단어로 검색할 때입니다. 이런 때는 아래처럼 쿼리를 씁니다.

SELECT * FROM #table WHERE `column1` LIKE '%aaa%' OR `column2` LIKE '%aaa%` OR `column3` LIKE `%aaa%'

이를 약간 비틀어서 생각해 보면

SELECT * FROM #table WHERE CONCAT(`column1`, `column2`, `column3`) LIKE '%aaa%'

이렇게 가능합니다.

 

그런데 CONCAT으로 묶는 칼럼 중에 값이 NULL일 경우는 값의 전체가 NULL이 됩니다.

CONCAT('aaa', 'bbb', 'ccc', NULL) 이렇게 되었다면 묶은 값이 그냥 NULL이 됩니다. 이런 경우엔 IFNULL 함수를 사용하시면 됩니다.

SELECT * FROM #table WHERE CONCAT(IFNULL(`column1`, ''), IFNULL(`column2`, ''), IFNULL(`column3`, '')) LIKE '%aaa%'

반응형

'Programming > SQL' 카테고리의 다른 글

[MySQL]정렬 순서가 있는 게 먼저 나오고 없는 게 나중에...  (0) 2021.12.09
[MySQL]ORDER BY  (0) 2020.03.10
[MySQL]ORDER BY  (0) 2020.02.26
[MySQL]ORDER BY  (0) 2020.02.26
[MySQL]ORDER BY  (0) 2020.02.14