문제
코딩테스트 연습 - 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 |
---|