Programming-[Backend]/Database

[TIL] MSSQL 날짜값 지정, CONVERT, DATEPART(DATE_FORMAT), GROUP BY alias

컴퓨터 탐험가 찰리 2021. 6. 8. 22:14
728x90
반응형

1. SQL 구문

날짜값이 포함된 MSSQL 쿼리문을 작성한다.

 

1
2
3
4
5
6
7
SELECT A1, CONVERT(varchar(10), a.updated_at, 20) AS date
CONVERT(varchar(10), DATEPART(dw, a.updated_at)) AS dayOfWeek
FROM absolute AS a
         JOIN ....
              ON ....
WHERE .....
GROUP BY CONVERT(varchar(10), a.updated_at, 20), DATEPART(dw, a.updated_at)
ORDER BY CONVERT(varchar(10), a.updated_at, 20);
cs

 

 


2. CONVERT(포맷(길이), 날짜값, 형식)

날짜값 변환은 CONVERT 구문으로 할 수 있다.

 

select convert(varchar(20), getdate(), 20)

-> 2021-06-08 12:59:39

 

select convert(varchar(10), getdate(), 20)

-> 2021-06-08

 

select convert(varchar(20), getdate(), 10)

-> 06-08-21

 

select convert(varchar(20), getdate(), 11)

-> 21/06/08

 

...

자세한 내용은 참조 1)

 


3. DATEPART(datepart, date)

DATEPART문을 통해서 날짜의 연, 월, 일, 요일 등 특정값을 반환할 수 있다. 이중 weekday는 dayOfWeek, 즉 일요일 = 1 부터 토요일 = 7까지 해당하는 요일의 숫자를 가져온다.

 

자세한 내용은 참조 2)

 

 

참고로 MYSQL 에서는 DATE_FORMAT 구문을 사용한다!

아래 표에서의 FORMAT을 지정하여 날짜의 특정값을 뽑아낸다. 자세한 내용은 참조3)

 

DATE_FORMAT(NOW(),'%Y-%m-%d')

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

 

 

 


4. GROUP BY as alias

SELECT 구문에서 정의한 날짜값들의 별칭(alias, date, dayOfWeek)을 GROUP BY 구문에서 작성할 수 없다. 그래서 그대로 작성해주었다. 이것은 참조 3)에 따르면, SQL 구문 해석은 아래와 같은 순서로 진행되기 때문에, 먼저 해석되는 GROUP BY 구문에서 뒤에 해석되는 SELECT 구문의 alias를 참조할 수 없기 때문이다.

 

-SQL 문의 해석 순서

  1. FROM clause
  2. WHERE clause
  3. GROUP BY clause
  4. HAVING clause
  5. SELECT clause
  6. ORDER BY clause

 


 

5. 참조

1) CONVERT 구문 설명

https://gent.tistory.com/35

 

2) DATEPART

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver15

 

3) MYSQL - DATE_FORMAT

https://lovelyjk.tistory.com/63

 

4) GROUP BY - SQL문 해석 순서

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver15

 

728x90
반응형