🚦 Summary
SQL의 SELECT 관련 기초 코테 문제를 풀이 합니다.
특정 월을 추출하는 2가지 방법을 활용해 문제를 풀어봤습니다.
날짜 관련 데이터 추출에 사용되는 다양한 SQL 함수도 함께 공부 했습니다.
💡 문제 설명
기본 정보
다음은 식당 리뷰 사이트의 회원 정보를 담은 MEMBER_PROFILE
테이블입니다. MEMBER_PROFILE
테이블은 다음과 같으며 MEMBER_ID
, MEMBER_NAME
, TLNO
, GENDER
, DATE_OF_BIRTH
는 회원 ID, 회원 이름, 회원 연락처, 성별, 생년월일을 의미합니다.
Column name
Type
Nullable
MEMBER_ID
VARCHAR(100)
FALSE
MEMBER_NAME
VARCHAR(50)
FALSE
TLNO
VARCHAR(50)
TRUE
GENDER
VARCHAR(1)
TRUE
DATE_OF_BIRTH
DATE
TRUE
문제
MEMBER_PROFILE
테이블에서 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬해주세요.
예시
MEMBER_PROFILE
테이블이 다음과 같을 때
SQL을 실행하면 다음과 같이 출력되어야 합니다.
주의 사항
DATE_OF_BIRTH
의 데이트 포맷이 예시와 동일해야 정답처리 됩니다
문제 풀이 과정
문제 요구사항이 Oracle 기준 풀이 였습니다.
프로그래머스 SQL 코딩 테스트 문제는 주로 Oracle 이나 Mysql 쿼리로 풀이 됩니다.
조건 정리
문제 풀이
EXTRACT 함수는 날짜에서 특정 부분(연, 월, 일 등)을 추출하는 데 사용됩니다. 이를 활용하여 생일의 월이 3월인 회원을 필터링 할 수 있습니다.
1
2
3
4
5
6
SELECT MEMBER_ID , MEMBER_NAME , GENDER , TO_CHAR ( DATE_OF_BIRTH , 'YYYY-MM-DD' ) AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE GENDER = 'W'
AND TLNO IS NOT NULL
AND EXTRACT ( MONTH FROM DATE_OF_BIRTH ) = 3
ORDER BY MEMBER_ID ASC ;
실행 결과
member_id
member_name
gender
date_of_birth
seoyeons@naver.com
박서연
W
1992-03-16
TRUNC 함수를 사용한 쿼리
TRUNC 함수는 날짜를 특정 단위로 자르는 데 사용됩니다. 이를 활용하여 날짜를 월 단위로 잘라서 비교할 수 있습니다.
1
2
3
4
5
6
SELECT MEMBER_ID , MEMBER_NAME , GENDER , TO_CHAR ( DATE_OF_BIRTH , 'YYYY-MM-DD' ) AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE GENDER = 'W'
AND TLNO IS NOT NULL
AND TRUNC ( DATE_OF_BIRTH , 'MM' ) = TRUNC ( DATE '2023-03-01' , 'MM' )
ORDER BY MEMBER_ID ASC ;
실행 결과
member_id
member_name
gender
date_of_birth
seoyeons@naver.com
박서연
W
1992-03-16
날짜 관련 추출함수 정리
EXTRACT 함수 : 특정 날짜 부분(연, 월, 일 등)을 추출합니다.
1
2
3
SELECT EXTRACT ( YEAR FROM DATE '2023-06-20' ) AS year_part FROM DUAL ;
SELECT EXTRACT ( MONTH FROM DATE '2023-06-20' ) AS month_part FROM DUAL ;
SELECT EXTRACT ( DAY FROM DATE '2023-06-20' ) AS day_part FROM DUAL ;
DATE 데이터 유형에서 연도(YEAR), 월(MONTH), 일(DAY) 등을 추출할 수 있습니다.
TO_CHAR 함수
TO_CHAR 함수 : 날짜를 특정 형식으로 변환합니다.
1
2
3
SELECT TO_CHAR ( DATE '2023-06-20' , 'YYYY' ) AS year_part FROM DUAL ;
SELECT TO_CHAR ( DATE '2023-06-20' , 'MM' ) AS month_part FROM DUAL ;
SELECT TO_CHAR ( DATE '2023-06-20' , 'DD' ) AS day_part FROM DUAL ;
포맷 문자열을 사용해 다양한 형식으로 날짜를 변환할 수 있습니다.
TRUNC 함수
TRUNC 함수 : 날짜를 특정 단위로 잘라냅니다.
1
2
3
SELECT TRUNC ( DATE '2023-06-20' , 'YEAR' ) AS trunc_year FROM DUAL ;
SELECT TRUNC ( DATE '2023-06-20' , 'MONTH' ) AS trunc_month FROM DUAL ;
SELECT TRUNC ( DATE '2023-06-20' , 'DAY' ) AS trunc_day FROM DUAL ;
YEAR, MONTH, DAY 등의 단위를 사용해 날짜를 자를 수 있습니다.
LAST_DAY 함수
LAST_DAY 함수 : 주어진 날짜의 해당 월의 마지막 날을 반환합니다.
1
SELECT LAST_DAY ( DATE '2023-06-20' ) AS last_day_of_month FROM DUAL ;
NEXT_DAY 함수
NEXT_DAY 함수 : 주어진 날짜 이후의 특정 요일의 날짜를 반환합니다.
1
SELECT NEXT_DAY ( DATE '2023-06-20' , 'MONDAY' ) AS next_monday FROM DUAL ;
특정 요일을 기준으로 다음 날짜를 구할 때 유용합니다.
ADD_MONTHS 함수
ADD_MONTHS 함수 : 주어진 날짜에 특정 개월 수를 더하거나 뺍니다.
1
2
SELECT ADD_MONTHS ( DATE '2023-06-20' , 1 ) AS next_month FROM DUAL ;
SELECT ADD_MONTHS ( DATE '2023-06-20' , - 1 ) AS previous_month FROM DUAL ;
날짜 계산에 유용하며, 개월 단위로 더하거나 뺄 수 있습니다.
🎈 Outro.
날짜관련 함수들에서는 사소한 실수로 코테 실수가 정말 많이 발생하는 문제 유형 같습니다.
특히 코테에서 요구하는 날짜 포맷이 있다면 샘플로 날짜 데이터를 추출하여 어떤 포맷인지 확인을 하고 쿼리를 문제 요구사항에 맞게 작성하는게 중요 합니다.
태그:
add_months ,
coding-test ,
extract ,
last_day ,
LV2 ,
next_day ,
select ,
select문 ,
sql ,
to_char ,
날짜추출함수
카테고리:
coding-test ,
personal_study
업데이트: 2024-06-20
댓글남기기