본문 바로가기
SQL 문제 풀기/1. 프로그래머스 SQL : 2023.12.17~2024.2.29

<프로그래머스 31> DATETIME에서 DATE로 형 변환(Lv.2)

by HYEHYE_SON 2024. 1. 16.
728x90

 

프로그래머스에서 제공하는 SQL문제 매일 풀기 챌린지


문제 설명 

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
ANIMAL_INS 테이블 구조는 다음과 같으며,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는
각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

 

 

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
INTAKE_CONDITION VARCHAR(N) FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_INTAKE VARCHAR(N) FALSE

문제

ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해 주세요. 이때 결과는 아이디 순으로 조회해야 합니다.
단, 시각(시-분-초)을 제외한 날짜(년-월-일)만 보여주세요.

예시

예를 들어, ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A349996 Cat 2018-01-22 14:32:00 Normal Sugar Neutered Male
A350276 Cat 2017-08-13 13:50:00 Normal Jewel Spayed Female
A350375 Cat 2017-03-06 15:01:00 Normal Meo Neutered Male
A352555 Dog 2014-08-08 04:20:00 Normal Harley Spayed Female
A352713 Cat 2017-04-13 16:29:00 Normal Gia Spayed Female

 

SQL문을 실행하면 다음과 같이 나와야 합니다.

 

ANIMAL_ID NAME 날짜
A349996 Sugar 2018-01-22
A350276 Jewel 2017-08-13
A350375 Meo 2017-03-06
A352555 Harley 2014-08-08
A352713 Gia 2017-04-13

 

 

본 문제는 Kaggle의 "Austin Animal Center Shelter Intakes and Outcomes"에서 제공하는 데이터를 사용하였으며 ODbL의 적용을 받습니다.


정답

# 오라클 정답

select animal_id, name, to_char(datetime, 'RRRR-MM-DD') as 날짜
    from animal_ins
    order by animal_id;
    

# MySQL 정답

select animal_id, name, date_format(datetime, '%Y-%m-%d') as 날짜
    from animal_ins
    order by animal_id;

 

해설하기

# 1. SELECT절 
 출력하고자 하는 컬럼을 나열하는데, 
 datetime 컬럼의 값들을 시각(시-분-초)을 제외하고
 날짜(년~월~일)만 출력해야 하기 때문에
 아래와 같은 조치를 취해야한다.

   ▶ 오라클 해설
   TO_CHAR([컬럼명], '변경할 데이터 형태')
   위의 함수를 사용해서 날짜형 데이터 형식을 → 문자형 데이터 형식으로 변환한다.

   * 표시한 형태 해석(오라클의 경우 대소문자 구분 없음)
   - RRRR/YYYY : Year 연도 4자리로 표기(ex. 2023, 2024)
   - MM : Month 월 2자리로 표기 (ex. 05, 07)
   - DD : Day 일 2자리로 표기 (ex. 01, 31)

   ▶ MySQL 해설
   날짜형식의 포맷을 지정해 주는
   DATE_FORMATE([컬럼명], '변경할 데이터 형태' ) 함수
   를 이용한다.

   * 표시한 형태 해석(대소문자 구분 있음)
   - %Y : Year 연도를 4자리로 표기 (ex. 2023, 2024)
   - %m : Month 월을 2자리로 표기(ex. 05, 12)
   - %d : Day 일을 두 자리로 표기(ex. 04, 28)

   
* 참고
   - %c :Month 월을 한 자리로 표기(ex. 5, 12) 
   - %e :Day 일을 한자리로 표기(ex. 4, 28)


# 2. FROM 절 
데이터를 가져올 테이블 명을 작성해 준다.


# 3. ORDER BY 절
출력된 결과를 ANIMAL_ID를 기준으로 
ASC(오름차순) 정렬해 준다.
오름차순은 기본값이기 때문에 생략해 줘도 된다.

 

결과 출력

 

 

 

출처 : 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

반응형