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')
'데이터 분석 > SQL' 카테고리의 다른 글
| [day8] 특정 열값이 MAX인 행을 그룹핑하기 (0) | 2025.02.24 |
|---|---|
| [day5] 날짜함수 (DATE, DATEDIFF, DATE_ADD, DATE_SUB, DAYOFMONTH, DAYOFWEEK/WEEKDAY, CURDATE) (0) | 2025.02.21 |
| [day3] DATE_FORMAT 함수로 날짜 형식 고르기 (0) | 2025.02.19 |
| [day3] LIKE 문에서 대소문자 구분하기 (0) | 2025.02.19 |
| [day2] SQL - 상위 n개 데이터 구하기 'Limit' (0) | 2025.02.18 |