[프로그래머스(Programmers)][SQL] String, Date (Lv2) 중성화 여부 파악하기

728x90

 

https://programmers.co.kr/learn/courses/30/lessons/59409?language=mysql 

 

코딩테스트 연습 - 중성화 여부 파악하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

 

 

동물의 아이디이름, 중성화 여부아이디 순으로 조회하는 SQL 문
( 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있음
  이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시 )

 

MySQL

SELECT ANIMAL_ID, NAME, 
       IF( REGEXP_LIKE( SEX_UPON_INTAKE, 'Neutered|Spayed' ), 'O', 'X' ) 중성화
       -- IF( SEX_UPON_INTAKE LIKE 'Neutered%' OR SEX_UPON_INTAKE LIKE 'Spayed%', 'O', 'X' )  중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

 

 ※  LIKE 여러 개 연산 시  --  IN( ) 안 됨  →  REGEXP_LIKE( ) 사용

 ※  REGEXP_LIKE( )

더보기
REGEXP_LIKE( expr, pattern [, match_type] )

문자열( expr )이 패턴에 지정된 정규식( pattern )과 일치하면 1을 반환하고 그렇지 않으면 0을 반환

<  pattern  >

Special characters and Constructs Description
^ 문자열의 시작 부분
$ 문자열의 끝
. 모든 문자
( 캐리지 리턴 및 개행 포함, 문자열 중간에서 일치시키려면 m(여러 행) 일치 제어 문자 또는 (?m) 패턴 내 수정자를 제공해야 함 )
a * 0 개 이상의 a 문자 시퀀스
a + 1 개 이상의 a 문자 시퀀스
a ? 0 개 또는 1 개의 a 문자
a | b a 또는 b
( abc ) * 'abc' 시퀀스의 0개 이상의 인스턴스
( 단일 하위 표현식으로 처리되는 그룹화 표현식 )
{ n } n 개 
{ n , } n 개 이상
{ n , m } n 개 이상, m 개 이하
{ , m } m 개 이하
[ a - z ] a 부터 z 까지의 문자 중 하나
( 목록에 표시된 표현식 중 하나와 일치해야 하는 일치 목록을 지정하기 위한 대괄호 표현식 )
[ ^ a - z ] a 부터 z 까지를 제외한 문자 중 하나
[ = char_class = ]  
[ : char_class : ]  

https://dev.mysql.com/doc/refman/8.0/en/regexp.html#regexp-syntax

https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-like

<  match_type  >

  *  c  :  대소문자 구분
  *  i  :  대소문자 구분 안 함

 

 

Oracle DB

SELECT ANIMAL_ID, NAME, 
	CASE WHEN REGEXP_LIKE( SEX_UPON_INTAKE, 'Neutered|Spayed' )
    -- CASE WHEN SEX_UPON_INTAKE LIKE 'Neutered%' OR SEX_UPON_INTAKE LIKE 'Spayed%'
		THEN 'O' 
		ELSE 'X' 
	END 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

 

 ※  분기문 안에서 LIKE 연산  --  DECODE( ) 안 됨  →  CASE 사용

 ※  LIKE 여러 개 연산 시  --  REGEXP_LIKE( ) 사용

 ※  REGEXP_LIKE( )

 

 

 

반응형