DB/SQL

[SQL]3월에 태어난 여성 회원 목록 출력하기 - SQL 고득점 Kit

나맘임 2025. 2. 11. 23:02

문제

코딩테스트 연습 - 3월에 태어난 여성 회원 목록 출력하기 | 프로그래머스 스쿨

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

SELECT 
    MEMBER_ID, 
    MEMBER_NAME, 
    GENDER, 
    DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE TLNO IS NOT NULL 
    AND DATE_OF_BIRTH LIKE '%-03-%'
    AND GENDER = 'W'
ORDER BY MEMBER_ID;

 

이 문제에서 포인트는 NULL 체크와 DATE에서 월을 뽑아내는 것과 문제가 원하는대로 DATE를 표시해주는 것이다.

 

WHERE TLNO IS NOT NULL

NULL 체크는 IS NOT NULL 이라는 키워드를 통해 진행하면 된다.

 

문제는 DATE_OF_BIRTH가 DATE 타입인데 3월인지 파악해야 하는 것이다.

여기엔 여러 가지 방법이 있다.

AND DATE_OF_BIRTH LIKE '%-03-%'

먼저, 위 풀이대로 LIKE와 와일드 카드 패턴을 사용하여 중간에 03이 있는지 찾는 방식이 있다.

와일드 카드 패턴 중 하나인 %는 0개 이상의 문자 즉, 모든 문자를 말한다.

A%  라고 했으면 A로 시작하는 어떤 아무 문자 다 처리가 된다.

 

추가로 다른 와일드 패턴에 대한 설명도 하자면 다음과 같다.

_ 는 정확히 하나의 문자를 의미한다.

A_ 라고 한다면 A로 시작하고 정확히 아무 한 글자만 더 있는 문자를 찾는다.

A__ 처럼 두 개 이상의 사용도 가능하다.

 

- 는 여기선 아니지만 문자 범위를 지정할 때 사용한다.

[A-C]% 라고 한다면 A,B,C 중에서 시작하는 문자열을 찾는 것이다.

 

^ 는 부정의 의미이다. 범위 사용 시에 이 범위에 해당하지 않는 것을 찾는다는 의미이다.

[^A-C]% 라고 한다면 A,B,C로 시작하는 문자열은 빼고 다 찾는 다는 말이다.

 

LIKE를 안쓰고 하는 방법 또한 있다.

AND MONTH(DATE_OF_BIRTH) = 3

MONTH라는 함수를 사용하면 DATE 타입에서 월을 빼서 준다.

 

이와 비슷한 함수를 더 소개하자면 다음과 같다.

SELECT YEAR('2025-02-11'); -- 2025

YEAR은 DATE 타입에서 년도를 빼서 출력해준다.

SELECT DAY('2025-02-11'); -- 11

DAY는 일을 빼서 준다.

 

SELECT DAYOFWEEK('2025-02-11'); -- 4 (수요일)

DAYOFWEEK는 요일을 반환한다. 일요일이 1이므로 참고하자.

 

마지막으로 문제가 원하는 대로 DATE를 표시해는 관문이 남았다.

DATE_FORMAT(DATE_OF_BIRTH, '%Y-%m-%d') AS DATE_OF_BIRTH

여기선 DATE_FORMAT이라는 함수를 사용할 수 있다.

첫 번째 인자로 DATE를 넣고 두 번째 인자로 날짜 형식을 넣어주면 해당 형식에 맞춰서 반환된다.

이 날짜 형식자가 너무 많으므로 GPT 피셜의 표를 참고하면 좋다.

 

'DB > SQL' 카테고리의 다른 글

[SQL]평균 일일 대여 요금 구하기 - SQL 고득점 Kit  (0) 2025.02.11