본문 바로가기

Database/sql 강의

sql 독학 강의 # 단일행 함수 잘 사용 하기(날짜 함수) 6편 -sTricky

sql 독학 강의 # 단일행 함수 잘 사용 하기(날짜 함수) 6편 -sTricky

컨텐츠 index

1. 지금 현재 날짜, 시간 출력 하기

2. 날짜, 시간에 따른 특정 정보 출력 하기

3. 날짜, 시간을 연산하여 출력 하기

4. 시간과 초 데이터 변환 하여 출력 하기

5. period_add, period_diff 를 이용하여 원하는 값 출력 하기

6. date_format 함수 사용하여 출력 하기

안녕하세요.

 

이번 SQL 공부 강의는 <단일행 함수 잘 사용 하기> 에서 날짜 함수를 다뤄보겠습니다.

 

데이터베이스에서 많은 데이터를 관리하지만 날짜 데이터는 정말 중요한 데이터라 할 수 있습니다.

 

날짜 데이터는 저장되어 있는 많은 데이터들의 이름표 같은게 될 수도 있고, 특정 데이터를 찾기 위한 키가 될 수도 있습니다.

 

여러 상황에서 날짜 데이터를 날짜 함수를 통해 잘 컨트롤 할 수 있다면 데이터를 다루고 관리하는 데 있어서 많은 도움이 될 것이라 생각합니다.

 

자, 그럼 시작해보도록 하겠습니다.

 

#지난 강의 보러 가기#

2020/03/25 - [Database/sql 강의] - sql 공부 강의 # 단일행 함수 잘 사용 하기(숫자 함수) 5편 -sTricky

 

sql 공부 강의 # 단일행 함수 잘 사용 하기(숫자 함수) 5편 -sTricky

sql 공부 강의 # 단일행 함수 잘 사용 하기(숫자 함수) 5편 -sTricky 컨텐츠 index 1. round 함수 사용 하기 2. truncate 함수 사용 하기 3. mod 한수 사용 하기 4. ceil 함수 사용 하기 5. floor 함수 사용 하기..

stricky.tistory.com


1. 지금 현재 날짜, 시간 출력 하기

mysql에서 지금 현재 날짜, 시간을 확인하는 방법은 매우 다양합니다. 여러 가지가 있지만 가장 많이 쓰이는 것을 위주로 안내해드리겠습니다.

SQL 명령

결과

select now();

2020-03-31 16:06:41

select sysdate();

2020-03-31 16:06:48

select current_timestamp();

2020-03-31 16:07:06

select curdate();

2020-03-31

select current_date();

2020-03-31

select current_date();

16:07:26

select current_time();

16:07:33

select now()+0;

20200331160754

select current_time()+0;

160813

위와 같이 다양한 SQL 명령을 통해서 현재 날짜, 시간을 출력할 수 있습니다.

더불어 가장 아래 두줄을 주목해 보시면 '+0'이라는 연산을 추가하면 날짜나 시간을 다른 형식에 맞게 출력하지 않고 숫자를 나열한 형태로 출력할 수 있습니다. 이때 출력되는 문자열은 숫자 형태로 출력이 되게 됩니다.

 

 

 

2. 날짜, 시간에 따른 특정 정보 출력 하기

날짜나 시간에 따른 특정 정보만 출력하는 함수들이 있습니다. 이것도 매우 다양하게 있으니 대표적인 것들 위주로 소개해 드리겠습니다.

SQL 명령

결과

설명

select dayofweek('2020-10-04 14:20:23');

1

1:일요일, 2:월요일...7:토요일

select weekday('2020-10-04 14:20:23');

6

0:월요일, 1:화요일...6:일요일

select dayofmonth('2020-10-04 14:20:23');

4

일자를 출력

select dayofyear('2020-10-04 14:20:23');

278

한해의 몇번째 날인지 출력

select month('2020-10-04 14:20:23');

10

월을 출력

select dayname('2020-10-04 14:20:23');

Sunday

요일을 영문으로 출력

select monthname('2020-10-04 14:20:23');

October

월을 영문으로 출력

select quarter('2020-10-04 14:20:23');

4

분기를 출력 (1분기~4분기)

select week('2020-10-04 14:20:23');

40

한해의 몇번째 주인지 출력

select year('2020-10-04 14:20:23');

2020

년도를 출력

select hour('2020-10-04 14:20:23');

14

시간을 출력

select minute('2020-10-04 14:20:23');

20

분을 출력

 

3. 날짜, 시간을 연산하여 출력 하기

날짜 및 시간을 연산한다는 것은 특정 날짜에서 며칠 뒤, 혹은 전을 출력하길 원하거나 시간, 분, 초를 더하거나 빼서 출력하는 것을 말합니다.

 

날짜 및 시간을 연산하는 함수는 아래와 같습니다. 사용법은 같으니, date_add 함수를 사용해서 설명드리겠습니다.

 

date_add(date, interval expr type)

date_sub(date, interval expr type)

adddate(date, interval expr type)

subdate(date, interval expr type)

 

<type사용 방법 안내>

 

 

 

type 변수 값

의미

type에 따expr 입력 형태

second

seconds

minute

minutes

hour

hours

day

days

month

months

year

years

minute_second

minutes:seconds

분:초

hour_minute

hours:minutes

시:분

day_hour

days hours

일 시

year_month

years months

년 월

hour_second

hours:minutes:seconds

시:분:초

day_minute

days hours:minutes

일 시:분

day_second

days hours:minutes:seconds

일 시:분:초

<예문 소개>

select date_add('2020-12-31 23:59:59',interval 1 second);

주어진 일시에 1초를 더하여 출력한다.

 

select date_add('2020-12-31 23:59:59',interval 31 day);

주어진 일시에 31일을 더하여 출력한다.

select date_add('2020-12-31 23:59:59',interval '1:1' minute_second);

주어진 일시에 1분, 1초를 더하여 출력한다.

select date_add('2020-12-31 23:59:59',interval '-1 17' day_hour);

주어진 일시에 하루와, 17시간을 빼서 출력한다.

 

 

4. 시간과 초 데이터 변환하여 출력 하기

시간과 초 값을 서로 변환해 주는 함수를 소개해드립니다.

select sec_to_time(3000);

3000초를 sec_to_time 함수를 이용하여 시간으로 환산하여 출력하면 50분이 됩니다.

select time_to_sec('20:21:30');

20시간 21분 30초를 time_to_sec 함수를 이용하여 초로 환산하여 출력하였더니 73290초가 출력되었습니다.

 

 

 

 

5. period_add, period_diff를 이용하여 원하는 값 출력 하기

period_add는 입력된 년월 데이터에 원하는 만큼의 개월을 더한 값을 'YYYYMM' 형태로 출력하는 함수입니다.

#입력값을 YYMM 으로 준 경우
select period_add(2001,15);
#입력값을 YYYYMM 으로 준 경우
select period_add(202001,15);

#출력값은 YYYYMM으로 똑같습니다.

 

6. date_format 함수 사용하여 출력 하기

date_format 함수는 mysql 혹은 mariadb에서 매우 많이 사용되는 날짜 함수 중 하나입니다. 이미 위에서 소개해드린 날짜 관련 함수들과 겹치는 기능이 있지만, 간단한 파라미터 조정으로 원하는 데이터를 원하는 형태로 쉽게 변경하여 출력할 수 있다는 장점이 있어 널리 사용되는 날짜 함수입니다.

select date_format('date','format');

위와 같은 형태로 사용을 하실 수 있습니다.

 

format에 들어가는 변수 따라서 출력되는 데이터 값의 형태와 내용이 달라집니다.

아래 표와 예문을 참고하시기 바랍니다.

format 변수

설명

%W

요일 (Monday....Sunday)

%D

일자 (1st, 2nd.....)

%Y

년도 (YYYY)

%y

년도 (YY)

%a

요일 영문 약어 (Sun, Mon..)

%d

일자 (01..02..31)

%e

일자 (1..2..31)

%m

월 (01..02..12)

%c

월 (1..2..12)

%b

월 (Jan...Dec)

%j

해당년에서 몇번째 날인지 (1...366)

%H

시 (00..01..02..23)

%k

시 (0..1..2..23)

%h

시 (01..02..12)

%l

시 (1..2..12)

%I

시 (01..02..12)

%i

분 (01..02..59)

%r

시각(12) (hh:mm:ss [A/P])

%T

시각(24) (hh:mm:ss)

%S,s

초 (00..01..59)

%p

오전/오후 (A/P)

%w

해당 요일중 몇번째 날인지 (0:일요일, 1:월요일.....6:토요일)

%U,u

해당년에서 몇번째 주 인지 (U:일요일이 주의 시작, u:월요일이 주의 시작)

 

 

 

 

<date_format 사용 예문>

select date_format('2020-01-01 16:59:09','%p');

select date_format('2020-01-01 16:59:09','%w');

select date_format('2020-11-04 16:59:09','%u');

 


오늘 날짜 함수에 관해서 공부를 해보았습니다.

 

날짜데이터는 일반 데이터와는 조금 다르게 관리하고, 사용해야 하는것을 아셨겠죠? 

 

그래도, 위에서 알려드린 함수만 잘 사용을 하게 된다면 특별한 어려움을 겪지는 않으실것 입니다.

 

다음 시간에 또 다시 돌아오겠습니다.

 

문의사항은 언제나 댓글로 부탁드리겠습니다!

 

감사합니다.

 

 

#다음편 보러 가기#

 

2020/04/07 - [Database/sql 강의] - sql 독학 강의 # 단일행 함수 잘 사용 하기(형 변환 함수) 7편 -sTricky

 

sql 독학 강의 # 단일행 함수 잘 사용 하기(형 변환 함수) 7편 -sTricky

sql 독학 강의 # 단일행 함수 잘 사용 하기(형 변환 함수) 7편 -sTricky 컨텐츠 index 1. mysql의 데이터 타입 알아보기 2. 묵시적 형 변환 이란? 3. CAST, CONVERT 함수 사용 하기 안녕하세요. 코로나 여파로 여..

stricky.tistory.com

 

by.sTricky

 

 

 

 

 

 

 

 

  • Favicon of https://ddangcoobird.tistory.com 땅꾸새 2020.03.31 19:23 신고

    오늘도 열공하고 갑니다 ^^

  • Favicon of https://jerry91.tistory.com Jerry_91 2020.03.31 19:28 신고

    포스팅 잘보고 갑니다!!

  • Favicon of https://sandcastle918.tistory.com 쑤통 2020.03.31 19:59 신고

    좋은 포스팅 잘보고 가요~^^

  • 좋은 글 잘 보고 갑니다 제 블로그에도 함 놀러오셔요~

  • 안녕하세요 2020.08.25 11:18

    안녕하세요, 먼저 sTricky님이 올려주신 양질의 강의 열심히 독학하고 있습니다. 좋은 강의 올려주셔서 감사합니다.

    다름이 아니고 index 3번의 date_add 함수 관련하여 궁금한게 있습니다. 예시로 들어주신거 중에 date_add('날짜', interval '-1 17' day_hour); 가 하루를 빼고 17시간을 더한것이라고 설명 주셨는데, 하루를 빼고 17시간이 빼진 값이 결과로 나온 것 같습니다. 제가 여러번 해봤는데, date_add('날짜', interval '-1 12' year_month);을 해봤을 때, -1년을 하고 12개월을 뺀 값이 출력되더라고요.
    혹시 제가 잘 못 이해한거라면 죄송하지만 한번만 설명 부탁드립니다. 감사합니다.

    • Favicon of https://stricky.tistory.com nice sTricky 2020.08.25 11:49 신고

      네 안녕하세요!
      제가 지금 말씀하신 부분을 확인 했는데, 말씀하신것처럼 작동하는것이 맞습니다.
      제가 올린 sql 결과 역시 그렇게 표현이 되어 있네요.
      아무래도 제가 포스팅을 할때 착각하고 그렇게 쓴것 같습니다. 사실 저런형태는 잘 쓰지 않아서 저도 기존 예제들을 활용한건데..ㅎㅎ
      혼선을 드려서 죄송합니다. 이해하신것이 맞습니다.
      쭉~ 보고 계시다니, 우선 감사의 말씀 전하구요, 보시다가 또 이런 오류사항이 있으면 이렇게 소통 해주시면 정말 감사할것 같습니다. 고맙습니다. 좋은하루되세요!

    • 감사합니다 2020.08.25 13:55

      빠른 피드백 감사합니다! 제가 비전공자여서 이런 종류 공부는 처음 해봅니다. 혹시 위에 포스팅 해두신 자료의 함수를 전부 외워야 하는지요? 예를 들면 date_format 함수에서 format 변수가 각각 무엇을 의미하는지 같은거요.
      sTricky님도 좋은 하루 보내세요. 코로나 조심하고요!

    • Favicon of https://stricky.tistory.com nice sTricky 2020.08.25 15:12 신고

      아뇨, 외우면 사용할때 편하겠지만.. 이런게 있다 정도 알고 계시면 됩니다. 그럼 찾아서 그때 그때 사용할수 있겠죠.