오늘은 sql 코딩 테스트를 풀면서 새로 알게 된 것을 적어보려고 한다.
일단 알아볼 것은 날짜의 형태를 변경하는 DATE_FORMAT과 글자를 합칠 수 있는 concat 메서드이다.
DATE_FORMAT
DATE_FORMAT 부터 보자.
MYSQL에서는 DATETIME을 YYYY-MM-DD hh:mm:ss의 형식으로 반환을 한다.
MYSQL 공식문서 DATE and TIME Function
- DATETIME의 형식은 YYYY-MM-DD hh:mm:ss 형식으로 반환
- DATE 형식은 YYYY-MM-DD 형식으로 반환한다.
- DATE 타입은 YYYY-MM-DD 형식이지만 DATE_FORMAT으로 %Y-%m-%d %h:%m:%s 형식으로 변환을 한다면 시분초값은 0으로 지정이 된다.
날짜의 형식을 나타낸 정규표현식 표이다.
FORMAT | 설명 |
%M | Month 월(Janeary, February ...) |
%m | Month 월(01, 02, 03 ...) |
%W | Day of Week 요일(Sunday, Monday ...) |
%D | Month 월(1st, 2dn, 3rd ...) |
%Y | Year 연도(1999, 2000, 2020) |
%y | Year 연도(99, 00, 20) |
%X | Year 연도(1999, 2000, 2020) %V와 같이쓰임 |
%x | Year 연도(1999, 2000, 2020) %v와 같이쓰임 |
%a | Day of Week요일(Sun, Mon, Tue ...) |
%d | Day 일(00, 01, 02 ...) |
%e | Day 일(0, 1, 2 ..) |
%c | Month(1, 2, 3 ..) |
%b | Month(Jen Feb ...) |
%j | n번째 일(100, 365) |
%H | Hour 시(00, 01, 24) 24시간 형태 |
%h | Hour 시(01, 02, 12) 12시간 형태 |
%I(대문자 아이) | Hour 시(01, 02 12) 12시간 형태 |
%l(소문자 엘) | Hour 시(1, 2, 12) 12 시간 형태 |
%i | Minute 분(00, 01 59) |
%r | hh:mm:ss AP |
%T | hh:mm:ss |
%S, %s | Second 초 |
%p | AP, PM |
%w | Day Of Week (0, 1, 2) 0부터 일요일 |
%U | Week 주(시작: 일요일) |
%u | Week 주(시작 월요일) |
%V | Week 주(시작: 일요일) |
%v | Week 주(시작:월요일) |
기본 형식을 보자.
DATE_FORMAT을 통해서 년월일로 표현한 것을 볼 수 있다.
- %Y-%m-%d
- %y-%m-%d를 사용한다면 YY-MM-DD로 표현이 된다.
이제 코딩 테스트의 문제를 보자.
기본적으로 모든 테이블에 대한 데이터를 모두 뽑아 보았다.
위에 그림과 같이 DATETIME의 타입을 가지고 있는 것을 볼 수 있었다.
그렇기에 DATE_FORMAT을 이용해서 %Y-%m-%d 형태로 바꾸어 줬더니 문제에서 원하는 방식으로 나오는 것을 확인할 수 있다.
CONCAT
CONCAT함수는 문자열 혹은 컬럼 값을 합칠 때 사용하는 함수이다.
즉, CONCAT 함수는 둘 이상의 문자열을 입력한 순서대로 합쳐서 반환해주는 함수이다.
사용방법
CONCAT(A, B, [C, D, ...]) 함으로써 A와 B, C, D를 모두 합쳐서 보여주게 된다. A,B,C,D 등은 문자열이 될 수 있고 컬럼이 될 수 도있다.
예시를 보면
select concat('안녕하세요','제','블로그에','와주셔서','감사합니다') AS CONCAT;
결과값
CONCAT |
'안녕하세요제블로그에와주셔서감사합니다' |
위와 같은 결과값이 나오게 된다.
컬럼 데이터를 합쳐보자.
Table이름 : hero
type | 이름 |
1 | 홍길동 |
2 | 세종대왕 |
3 | 이순신 |
4 | 안중근 |
위와같은 테이블이 있을 때 이것을 Concat을 이용해서 type과 이름 column을 합친다면
SELECT *, CONCAT(TYPE, 이름) as HERO FROM hero;
type | 이름 | HERO |
1 | 홍길동 | 1홍길동 |
2 | 세종대왕 | 2세종대왕 |
3 | 이순신 | 3이순신 |
4 | 안중근 | 4안중근 |
컬럼명 넣어서 합쳐진 것을 볼 수 있다.
이제 필자가 푼 코딩 테스트 문제를 보자.
문제에서 평균거리를 계산을 한다고 했을 때 우리는 예시에서와 같이 뒤에 꼭 KM를 붙여주어야 했다. 그렇기에 여기서 CONCAT을 사용해서 'km'를 붙여주었다.
이것으로 코딩테스트 문제를 풀다가 알게된 MYSQL 메서드를 작성해 보았다.
'DataBase' 카테고리의 다른 글
[DB] DataBase 정규화 (0) | 2024.04.15 |
---|---|
[MYSQL] PERCENTAGE_RANK 메서드(RANK 함수들), ORDER BY(다중정렬) (0) | 2024.04.15 |
문의사항과 공지사항 게시판 ERD 설계 (2) | 2024.04.14 |
[DB]ERD 설계 (0) | 2024.04.11 |
MySql 메서드 공부 (1) | 2024.02.19 |