문제 설명
`ANIMAL_INS` 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. `ANIMAL_INS` 테이블 구조는 다음과 같으며, `ANIMAL_ID`, `ANIMAL_TYPE`, `DATETIME`, `INTAKE_CONDITION`, `NAME`, `SEX_UPON_INTAKE`는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
데이터 예시 테이블
출력해야 할 데이터
`ANIMAL_INS` 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜를 조회하는 SQL문을 작성해 주세요. 이때 결과는 아이디 순으로 조회해야 합니다.
코드 생각
- DATETIME 형식을 바꿀수 있는 DATE_FORMAT()을 사용해야겠다.
- 출력은 아이디, 이름, 날짜 컬럼만 출력해야겠다.
- 아이디순으로 정렬하여 출력되도록 해야겠다.
Solution.sql
# DATETIME에서 DATE로 형 변환
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, "%Y-%m-%d") AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;
새롭게 알게 된 기술 & 주요 기술
▶ DATE_FORMAT()
DATE_FORMAT() 메서드는 날짜 형식의 데이터를 원하는 형식으로 변환해 주는 함수입니다.
# 기본 사용 구조
DATE_FORMAT(date, format);
# date : 변환하고자 하는 날짜 형식의 데이터
# format : 원하는 날짜 형식
▶ DATE_FORMAT() 메서드의 format 형식
format | 설명 |
%a | 축약된 요일 이름 (일요일(Sun) 부터 토요일(Sat)) |
%b | 축약된 월 이름 (1월(Jan)부터 12월(Dec)) |
%c | 월을 숫자로 표시 (0 부터 12까지) |
%D | 일(day)을 숫자로 표시하고 접미사를 붙여서 표시 (0th, 1st, 2nd, 3rd...) |
%d | 일(day)을 숫자로 표시 (0 부터 31까지) |
%e | 일(day)을 숫자로 표시 (0 부터 31까지) |
%f | 마이크로초 표시 (000000 부터 999999까지) |
%H | 시간(hour) 표시 (00부터 23까지) : 24시간제 |
%h | 시간(hour) 표시 (01부터 12까지) : 12시간제 |
%I | 시간(hour) 표시 (01부터 12까지) : 12시간제 |
%i | 분(minute) 표시 (00부터 59까지) |
%j | 1년 기준으로 일(day) 표시 (001부터 366까지) |
%k | 시간(hour) 표시 (0부터 23까지) |
%l | 시간(hour) 표시 (1부터 23까지) |
%M | 월 이름 표시 (January 부터 December) |
%m | 월 숫자로 표시 (00부터 12까지) |
%p | 오전(AM) 또는 오후(PM) 표시 |
%r | 12시간 형식으로 오전/오후 같이 표시 (hh:mm:ss 뒤에 AM 또는 PM 표시) |
%S | 초(seconds) 표시 (00부터 59까지) |
%s | 초(seconds) 표시 (00부터 59까지) |
%T | 24시간 형식으로 시간 표시 (hh:mm:ss) |
%U | 일요일을 주의 첫시작으로 하며 1년 기준으로 표시 (00부터 53까지) : WEEK() 모드 0 |
%u | 월요일을 주의 첫시작으로 하며 1년 기준으로 표시 (00부터 53까지) : WEEK() 모드 1 |
%V | 일요일을 주의 첫시작으로 하며 1년 기준으로 표시 (01부터 53까지) : WEEK() 모드 2 - %X와 함께 사용됨 |
%v | 월요일을 주의 첫시작으로 하며 1년 기준으로 표시 (01부터 53까지) : WEEK() 모드 3 - %x와 함께 사용됨 |
%W | 요일 이름 표시 (일요일(Sunday) 부터 토요일(Saturday)까지) |
%w | 요일 숫자로 표시 (일요일 = 0 부터 토요일 = 6 까지) |
%X | 일요일을 주의 첫시작으로 하며 해당 연도를 숫자 4자리로 함께 표시 : %V와 함께 사용됨 |
%x | 월요일을 주의 첫시작으로 하며 해당 연도를 숫자 4자리로 함께 표시 : %v와 함께 사용됨 |
%Y | 4자리 숫자로 연도 표시 |
%y | 2자리 숫자로 연도 표시 |
%% | 문자 그대로의 % 문자 표시 |
▶ DATE_FORMAT() 메서드의 format 형식 사용 예시
SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
-> 'Sunday October 2009'
SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
-> '4th 00 Thu 04 10 Oct 277'
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
SELECT DATE_FORMAT('1999-01-01', '%X %V');
-> '1998 52'
SELECT DATE_FORMAT('2006-06-00', '%d');
-> '00'
실행결과
문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/59414
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Reference
- MySQL, "14.7 Date and Time Functions", https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
MySQL :: MySQL 8.0 Reference Manual :: 14.7 Date and Time Functions
14.7 Date and Time Functions This section describes the functions that can be used to manipulate temporal values. See Section 13.2, “Date and Time Data Types”, for a description of the range of values each date and time type has and the valid formats
dev.mysql.com
- Tistory, "[DB/Short] MySQL: DATETIME↔DATE 타입 간의 변환 방법", https://adjh54.tistory.com/277
[DB/Short] MySQL: DATETIME ↔ DATE 타입 간의 변환 방법
해당 글에서는 MySQL에서 DATETIME 타입을 DATE 타입으로 변환하는 방법에 대해 알아봅니다. 💡 [참고] 해당 문제를 참고하여 해당 변환방법을 확인하실 수 있습니다. 프로그래머스 코드 중심의 개발
adjh54.tistory.com
- w3schools, "MySQL DATE_FORMAT() Function", https://www.w3schools.com/mysql/func_mysql_date_format.asp
W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
'수수한 코딩세상 > Code Kata' 카테고리의 다른 글
[Programmers][Java] 3진법 뒤집기 (stack 자료구조 사용) (2) | 2024.12.20 |
---|---|
[Programmers][Java] 최대공약수와 최소공배수 (유클리드 호제법) (0) | 2024.12.19 |
[Programmers][MySQL] 여러 기준으로 정렬하기 (여러 컬럼 기준으로 정렬) (0) | 2024.08.27 |
[Programmers][MySQL] 최솟값 구하기 (MIN) (1) | 2024.08.27 |
[Programmers][MySQL] 상위 n개 레코드 (LIMIT) (1) | 2024.08.26 |