본문 바로가기

IT Story/SQL Story

SQL 함수: 날짜 함수

서버 현재 날짜, 시간 반환하기: GETDATE, SYSDATETIME 함수

GETDATE : 소수 3째 자리까지

SYSDATETIME: 소수 7째 자리까지 시간 표현

SELECT GETDATE(), SYSDATETIME()

결과

(열 이름 없음)                       (열 이름 없음)
2022-12-02 13:58:39.487 2022-12-02 13:58:39.4886374

 

서버 현재 UTC 날짜, 시간 반환하기: GETUTCDATE, SYSUTCDATETIME 함수

UTC: 협정 세계시(Uinversial Time Coordinated)

SELECT GETDATE(), GETUTCDATE(),SYSUTCDATETIME()

결과

(열 이름 없음)                     (열 이름 없음)                      (열 이름 없음)
2022-12-02 14:01:20.000 2022-12-02 05:01:20.000 2022-12-02 05:01:20.0034682

 

날짜 더하기: DATEADD 함수

날짜를 더하거나 뺴려면 DATEADD 함수를 사용한다.  DATEADD 함수는 날짜 형식(datepart), 숫자(number), 더하거나 뺄 대상 날짜(date)를 인자로 받는다.

날짜 가감: DATEADD 함수
DATEADD(datepart, number, date)

SELECT GETDATE(), DATEADD(year, 1, GETDATE()), DATEADD(year, -1, GETDATE())

→ 현재 날짜에서  year 부분만 1년 더한 것과 1년 뺀 결과를 반환 

(열 이름 없음)                       (열 이름 없음)                    (열 이름 없음)
2022-12-02 14:07:02.617 2023-12-02 14:07:02.617 2021-12-02 14:07:02.617

 

날짜 차이 구하기:. DATEDIFF 함수

날짜 형식(datepart), 시작 날짜(startdate), 종료 날짜(startdate)를 인자로 받는다.

날짜  차이 반환: DATEDIFF 함수
DATEDIFF(datepart, startdate, startdate)

SELECT DATEDIFF(year, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(quarter, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(month, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(dayofyear, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(day, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(week, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(hour, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(minute, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(second, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(millisecond, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

SELECT DATEDIFF(microsecond, '2019-12-31 23:59:59.9999999', '2021-01-01 00:00:00.0000000');

결과

year: 2

quarter: 5

month: 13

dayofyear: 267

day: 367

week: 52

hour: 8785

minute: 527041

second: 31622401

 

지정된 날짜 일부 반환하기:. DATEPART, DATENAME 함수

보고서에 연월일만 표시할 수 있다.

날짜 일부 반환: DATEPART, DATENAME 함수
DATEPART(datepart, date)
DATENAME(datepart, date)

DATEPART 함수는 반환값이 월요일이라면 1을, 

DATENAME 함수는 반환값이 월요일이라면 월요일을 그대로 반환한다. 

SELECT symbol, last_crawel_date, 

        DATEPART(year, last_crawel_date),

        DATEPART(month, last_crawel_date),

        DATEPART(day, last_crawel_date),

        DATEPART(weekday, last_crawel_date)

FROM nasdaq_company

결과

symbol last_crawel_date                             (열 이름 없음) (열 이름 없음) (열 이름 없음) (열 이름 없음)
^CMC   200 2021-11-05 00:00:00.000       2021                 11                         5                        6
^DJI      2021-11-05 00:00:00.000               2021                 11                         5                        6
^FTSE  2021-11-05 00:00:00.000              2021                  11                         5                        6
^GSPC 2021-11-05 00:00:00.000              2021                  11                         5                        6
^IXIC     2021-11-05 00:00:00.000              2021                  11                         5                        6
^N225   2021-11-02 00:00:00.000             2021                   11                         2                        3

 

SELECT symbol, last_crawel_date, 

        DATENAME(year, last_crawel_date),

        DATENAME(month, last_crawel_date),

        DATENAME(day, last_crawel_date),

        DATENAME(weekday, last_crawel_date)

FROM nasdaq_company

결과

symbol last_crawel_date                             (열 이름 없음) (열 이름 없음) (열 이름 없음) (열 이름 없음)
^CMC   200 2021-11-05 00:00:00.000       2021                 11                         5                        금요일
^DJI      2021-11-05 00:00:00.000               2021                 11                         5                        금요일
^FTSE  2021-11-05 00:00:00.000              2021                  11                         5                        금요일
^GSPC 2021-11-05 00:00:00.000              2021                  11                         5                        금요일
^IXIC     2021-11-05 00:00:00.000              2021                  11                         5                        금요일
^N225   2021-11-02 00:00:00.000             2021                   11                         2                        화요일

 

날짜에서 일, 월, 연도 가져오기: DAY, MONTH, YEAR 함수

SELECT symbol, last_crawel_date,

        YEAR(last_crawel_date),

        MONTH(last_crawel_date),

       DAY(last_crawel_date)

FROM nasdaq_company

결과

symbol  last_crawel_date                             (열 이름 없음) (열 이름 없음) (열 이름 없음) 

AACG      2021-11-05 00:00:00.000             2021             11                          5
AACIU     2021-11-05 00:00:00.000             2021             11                          5
AACQ     2021-06-24 00:00:00.000             2021             6                          24
AACQU  2021-06-24 00:00:00.000             2021             6                          24
AACQW 2021-06-24 00:00:00.000             2021             6                          24
AADI       2021-11-05 00:00:00.000             2021             11                          5
AAIC      2021-11-05 00:00:00.000             2021              11                          5

 

날짜 자료형 또는 형태 변환하기: CONVERT 함수

YYYY-MM-DD hh:mm:ss.sss 형태를 YY/MM/DD 형태로 변환할 수 있다.

SELECT symbol, last_crawel_date,

              CONVERT(nvarchar(10), year(last_crawel_date)) + '/' +

              CONVERT(nvarchar(10), month(last_crawel_date)) + '/' +

              CONVERT(nvarchar(10), day(last_crawel_date)) 

FROM nasdaq_company

결과

symbol            last_crawel_date                        (열 이름 없음)
^CMC200      2021-11-05 00:00:00.000          2021/11/5
^DJI               2021-11-05 00:00:00.000           2021/11/5
^FTSE           2021-11-05 00:00:00.000          2021/11/5
^GSPC          2021-11-05 00:00:00.000          2021/11/5
^IXIC             2021-11-05 00:00:00.000           2021/11/5
^N225          2021-11-02 00:00:00.000            2021/11/2
^RUT           2021-11-05 00:00:00.000             2021/11/5

 

스타일 매개변수를 사용하면 쉽게 변경할 수 있다.

SELECT CONVERT(NVARCHAR(20), last_crawel_date, 120) FROM nasdaq_company

2021-11-05 00:00:00

SELECT CONVERT(NVARCHAR(20), last_crawel_date, 111) FROM nasdaq_company

2021/11/05

SELECT CONVERT(NVARCHAR(20), last_crawel_date, 112) FROM nasdaq_company

20211105

 

날짜 포맷표

포맷 번호 값 작성 형식 결과
1 select covnert(varchar, getdate(), 1) mm/dd/yy
2 select covnert(varchar, getdate(), 2) yy.mm.dd
  ...  
111 select covnert(varchar, getdate(), 111) yyyy/mm/dd
112 select covnert(varchar, getdate(), 112) yyyymmdd

시간 포맷 표

포맷 번호 값 작성 형식 결과
1 select covnert(varchar, getdate(), 8) hh:mm:ss
2 select covnert(varchar, getdate(), 14) hh:mm:ss:nnn
  ...  
114 select covnert(varchar, getdate(), 114) hh:mm:ss:nnn

 

퀴즈 2. 현재 날짜에서 45일 이전의 날짜와 요일을 구하세요.

SELECT CONVERT(NVARCHAR(10), DATEADD(day, -45, GETDATE()), 111) AS DATE, 
DATENAME(WEEKDAY, DATEADD(day,-45, GETDATE())) AS DATE_NAME

결과

DATE           DATE_NAME
2022/10/18 화요일

'IT Story > SQL Story' 카테고리의 다른 글

SQL 함수: 수학 함수  (0) 2022.12.05
SQL 함수: 집계 함수  (0) 2022.12.05
SQL 함수: 문자열 함수  (0) 2022.12.02
공통 테이블 식(Common Table Expression, CTE)  (0) 2022.12.01
서브 쿼리  (0) 2022.11.30