[SQL] 프로그래머스 : String, Date 문제

Jonie Kwon·2022년 4월 13일
0
post-custom-banner

루시와 엘라 찾기

https://programmers.co.kr/learn/courses/30/lessons/59046
이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회

코드

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS AI
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')

이름에 el이 들어가는 동물 찾기

https://programmers.co.kr/learn/courses/30/lessons/59047
이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성
이름을 알파벳 순으로 정렬하여 출력

코드

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS AI
WHERE ANIMAL_TYPE='Dog' AND NAME LIKE '%el%'
ORDER BY NAME

대소문자 때문에 INLIKE를 사용하려고 했는데 MySQL에서 사용이 안되고, 대신 REGEXP_LIKE를 쓸 수 있다고 한다. 근데 딱히 쓰지 않아도 대소문자를 구분하지 않아서 그냥 제출.
주의: MySQL은 대소문자를 구분하지 않고 출력하지만 Oracle은 대소문자를 구분

REGEXP_LIKE

REGEXP_LIKE(expr, pat[, match_type])
pat은 정규식을 입력하고 match_type은 i,c, m, n, u 등을 사용할 수 있다.

  • match_type
기호의미
i대소문자 구분하지 않음 (기본값)
c대소문자 구분
m멀티플라인 모드 (대상 문자열이 여러줄일 경우)
n.을 개행문자로 인식
uUnix-only line endings.

참고: MySQL Reference

REGEXP_LIKE를 이용한 코드

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS AI
WHERE ANIMAL_TYPE='Dog' AND REGEXP_LIKE(NAME, 'el')
ORDER BY NAME

중성화 여부 파악하기

https://programmers.co.kr/learn/courses/30/lessons/59409

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

코드

SELECT ANIMAL_ID, NAME
, CASE WHEN SEX_UPON_INTAKE LIKE 'Intact%' THEN 'X'
        ELSE 'O' END AS '중성화'
FROM ANIMAL_INS AI
ORDER BY ANIMAL_ID

REGEXP_LIKE를 이용한 코드

SELECT ANIMAL_ID, NAME
, CASE WHEN REGEXP_LIKE(SEX_UPON_INTAKE, 'Neutered|Spayed') THEN 'O'
        ELSE 'X' END AS '중성화'
FROM ANIMAL_INS AI
ORDER BY ANIMAL_ID

오랜 기간 보호한 동물(2)

https://programmers.co.kr/learn/courses/30/lessons/59411
입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회
보호 기간이 긴 순으로 조회

코드

SELECT AO.ANIMAL_ID, AO.NAME
FROM ANIMAL_INS AI
RIGHT JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID = AO.ANIMAL_ID
ORDER BY (AO.DATETIME - AI.DATETIME) DESC
LIMIT 2

DATETIME에서 DATE로 형 변환

https://programmers.co.kr/learn/courses/30/lessons/59414
모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회

코드

SELECT ANIMAL_ID, NAME, LEFT(DATETIME,10) '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

다른 풀이

SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME,'%Y-%m-%d') '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

DATE_FORMAT

DATE_FORMAT(date, format)
시간/날짜를 원하는 형태로 변경해주는 함수. format은 대/소문자를 구분하여 사용
MySQL Reference, SQL Tutorial

profile
메모하는 습관
post-custom-banner

0개의 댓글