IT 관련/Database

[MySQL] 요일 구하기 함수 weekday() 주의

nullzone 2017. 12. 25.
반응형

요일 구하기 함수 weekday() 주의


특정일자의 요일을 구하는 로직은 프로그램을 짤때 많이들 사용 하는 로직입니다.

주로 사용 하는 몇몇 랭귀지의 예를 보면

[javascript]


var d = new Date();
d.getDay();
return :  0 = Sunday, 1 = Monday, .... 6 = Saturday


[PHP]


$date = date('w');
return : 0 = Sunday, 1 = Monday, .... 6 = Saturday


즉, 대부분의 프로그래밍 랭귀지에서는

0 = Sunday, 1 = Monday, .... 6 = Saturday 로 리턴됩니다.

전통적으로 sunday가  0부터 시작이지요.


Database에서도 동일한 함수들을 제공 합니다.

단, ODBC에서 표준은 요일의 리턴 값이 다릅니다.

1 = Sunday, 2 = Monday,..... 7 = Saturday

* 일요일이 0이 아닌 1 입니다.

[oracle]


SELECT  TO_CHAR( TO_DATE('20150816','YYYYMMDD')+LEVEL, 'D' )  FROM DUAL;
return : 1 = Sunday, 2 = Monday,..... 7 = Saturday


[mssql]


SELECT DATEPART(DW, GETDATE()))
Return : 1 = Sunday, 2 = Monday,..... 7 = Saturday


[MySQL, MariaDB]


SELECT DAYOFWEEK(NOW())
return : 1 = Sunday, 2 = Monday,..... 7 = Saturday


문제는 MySQL, MariaDB 에서 

제공 하는 WEEKDAY()는 리턴이 ODBC 표준을 따르지 않고 다른 값을 리턴합니다.



SELECT WEEKDAY(NOW())
Return : 0 = Monday, 1 = Tuesday,..... 6 = Sunday


즉, 가능하면 표준을 따르는 DAYOFWEEK 를 사용하는게 좋을듯 합니다.

정리 하면 2016-08-29(월요일)의 요일값을 구할 때

 DB

요일구하는 함수 

리턴 

비고 

 Oracle

 SELECT  TO_CHAR( TO_DATE('20160829','YYYYMMDD')+LEVEL, 'D' )  FROM DUAL;

 2

 ODBC 표준

 MSSQL

 SELEST DATEPART(DW, GETDATE()))

 2

 ODBC 표준

 Mysql, mariadb

 SELECT DAYOFWEEK(NOW())

 2

 ODBC 표준

 SELECT WEEKDAY(NOW())

 0

 






반응형

댓글