데이터 분석/SQL

[day4] 정규 표현식 REGEXP 활용해서 LIKE + IN 효과 내기

경 민 2025. 2. 20. 11:49

Q. sex_upon_intake 에 'neutered' 나 'spayed' 가 포함되었으면 O, 아니면 X 로 나타내라.


LIKE 랑 IN 을 합쳐서 사용하면 되겠다 싶어서 돌려봤더니 

IF(SEX_UPON_INTAKE LIKE IN('%Nestered%','Spayed'),'O','X')

에러가 남.

이유를 찾아보니 MYSQL 에서는 LIKE와 IN을 한 번에 쓸 수 없다고 한다.

 

=> 정규표현식 (Regular Expression)을 활용하자.


REGEXP

데이터에서 특정 패턴과 일치하는 값을 찾을 때 사용

 

🔶 기본 구조

칼럼명 REGEXP '패턴'

 

🔶 의미

칼럼에서 '패턴'과 일치하는 값을 찾아줘

 

🔶 패턴

정규식 설명 예시
^ 시작 ^a = a로 시작하는 값
$ a$ = a로 끝나는 값
. 문자 1개 a.7 = a가7 , a나7, a57 등등
OR a |  b = a 또는 b
[ ] 안에 들어간 문자들 중 하나 ^[abc] = a 혹은 b 혹은 c로 시작
[^] 안에 들어간 문자들 제외 [^abc]$ = a 혹은 b 혹은 c를 제외한 문자로 끝
[a-z] 소문자 a부터 b까지 ^[a-z]* = 0개 이상의 소문자 알파벳으로 시작
[A-Z] 대문자 A부터 B까지 [A-Z]+ = 1개 이상의 대문자 알파벳
[[:alpha:]] 대소문자 구분 없이 모든 알파벳 문자 ^[[:alpha:]]+ = 1개 이상의 알파벳으로 시작
(대소문자 구분 없음)
[0-9] / [[:digit:]] 숫자 0부터 9까지 [^0-9]+$ = 숫자가 아닌 1개 이상의 문자로 끝
* 최소 0번 이상 .* = 0개 이상의 문자
+ 최소 1번 이상 .+ = 1개 이상의 문자
? 0번 또는 1번 ab? = a, ab / [AB]? = A, B, AB
{n} 정확히 n번 a[2] = aa
{n,} 최소 n번 이상 a[5] = aaaaa, aaaaaa, ...
{n,m} n번에서 m번까지 a[3,4] = aaa , aaaa
\ 정규식 기호를 일반 문자로 변환 \. = 문자 한 개가 아니라 '.'

 

🔶 문제 풀이

  • REGEXP 사용
IF(SEX_UPON_INTAKE REGEXP 'Neutered|Spayed','O','X')
  • LIKE ~ OR 사용
IF(sex_upon_intake LIKE '%neutered%' OR sex_upon_intake LIKE '%spayed%','O','X')