SEX_UPON_INTAKE
에 ‘Neutered’ 와 ‘Spayed’가 포함된 행을 찾으면 되는 문제여서 LIKE 함수를 사용했다.
SELECT ANIMAL_ID, NAME,IF(SEX_UPON_INTAKE LIKE '%Neutered%Spayed%','O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
근데 틀렸음 !!
중성화에 모두 X만 떴다.
SELECT ANIMAL_ID, NAME,IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR '%Spayed%','O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
처음에 이렇게 하면 LIKE ('%Neutered%' OR '%Spayed%')
이렇게 적용되는 줄 알았는데 실행해보니까 (SEX_UPON_INTAKE LIKE '%Neutered%') OR '%Spayed%'
이렇게 적용돼서 또 틀림!!
SELECT ANIMAL_ID, NAME,IF(SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%','O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
OR을 쓰려면 저렇게 길게 적어야한다.
근데 LIKE '%A%B%' 이렇게 쓰면 A or B 포함하는 거 찾아준다고 하던데…
다시 알아봐야겠따!
암튼 그래서 LIKE를 여러 번 사용해야 할 때는 LIKE보다 REGEXP를 사용하는 게 더 낫다.
SELECT ANIMAL_ID, NAME,IF(SEX_UPON_INTAKE REGEXP 'Neutered|Spayed','O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
REGEXP를 사용할 때 찾고 싶은 단어 사이에 ‘|’ 이 기호를 넣어주면 됨
IF문 말고 CASE WHEN도 있는데 이것도 함 써봤다
SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE REGEXP 'Neutered|Spayed' THEN 'O'
ELSE 'X' END AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
CASE WHEN 보다 REGEXP가 훨씬 간편하니까 이런 상황에서는 REGEXP를 쓰도록 하자~