PS 공부 기록

프로그래머스 SQL 고득점 Kit 6/6 : String, Date

정글러 2022. 3. 31. 16:27

 

in 연산을 이용한 tuple 내 포함 여부 필터링

select ANIMAL_ID, NAME, SEX_UPON_INTAKE
from ANIMAL_INS
where NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
order by ANIMAL_ID

 

like 연산을 이용한 문자열 부분일치 여부 필터링

select ANIMAL_ID, NAME
from ANIMAL_INS
where ANIMAL_TYPE = 'Dog' and NAME like '%el%'
order by NAME

like의 우변 string에는 부분일치 필터링 대상을 입력

'_'는 길이 1의 모든 letter에 일치

'%'는 모든 길이 모든 string에 일치

 

%로 스플릿해서 사이의 string마다 일치 여부를 확인하고

탐색이 패턴의 마지막까지 도달하면 True를 return하는 구조인 것 같다.

 

함수 timestampdiff()를 이용한 datetime type의 diff 구하기

select INS.ANIMAL_ID, INS.NAME
from (
    ANIMAL_INS INS join ANIMAL_OUTS OUTS
    on INS.ANIMAL_ID = OUTS.ANIMAL_ID
)
order by timestampdiff(SECOND, INS.DATETIME, OUTS.DATETIME) desc
limit 2

timestampdiff()의 첫째 인자는 diff를 측정한 단위. SECOND, DATE 등등 많다. 나머지 두 인자는 비교대상

datediff()라고 두개의 인자만 받는 date diff 측정 함수도 있다고 한다.

timestampdiff(DATE, A, B) = datediff(A, B)인 셈

 

datetime을 format에 맞게 출력

select ANIMAL_ID, NAME, date_format(DATETIME, '%Y-%m-%d') 날짜
from ANIMAL_INS

어떤 포맷들이 가능한지는 https://www.w3schools.com/sql/func_mysql_date_format.asp에 있다.

 

마지막 파트는 해결력보다도 경험, 숙련의 영역에 있는 분야 같다.

쓰면 유용한 함수나 포맷들이 잔뜩 있어서 그중 골라 쓰는?

클로즈북이면 저 포맷들을 다 외워야할텐데 다행히도 오늘 볼 코테는 오픈북 ㅎㅎ