SELECT A.DAY_N, SUM(CASE WHEN A.DAY_N <> '' THEN 1 ELSE 0 END ) AS COUNT_LI FROM( SELECT DATEPART(DD,REG_DATETIME)AS DAY_N FROM TABLE WHERE CONVERT(VARCHAR(30),REG_DATETIME,112) >= '20160928' AND CONVERT(VARCHAR(30),REG_DATETIME,112) <= '20160929' )A GROUP BY A.DAY_N ORDER BY A.DAY_N ASC
날짜 검색시
day | count |
28 | 231 |
29 | 23 |
위 코드는 mssql인데 mysql에서 참고해서 쓰려고 하니깐
DATEPART라는 함수때문에 에러나 나는거 같은데..
다른함수를 써야하는지 조언좀부탁드릴게요..
mysql의 날짜컬럼 데이터타입은 timestamp 입니다.
1. 원본 MSSQL 쿼리도 조건을 주는 방법이 잘못되었네요.
- 컬럼을 변경하여 조건값 형식에 맞추기보다는
- 컬럼은 그대로 두고 조건값을 컬럼 형식에 맞게 변경하여 비교하는 것이 좋습니다.
2. SUM 부분도 의미없는 CASE 구문이 사용되었네요.
- 그냥 COUNT(*) 하는 것과 같은 구문입니다.
3. MSSQL 의 DATEPART(dd, 는 일자를 구하는 부분이네요.
- MySQL 에서는 DATE_FORMAT(날짜, '%d') 를 이용하시면 됩니다.
SELECT DATE_FORMAT(reg_datetime, '%d') AS day_n , COUNT(*) AS count_li FROM table WHERE reg_datetime >= DATE_ADD('20160928', INTERVAL 0 DAY) AND reg_datetime < DATE_ADD('20160929', INTERVAL 1 DAY) GROUP BY DATE_FORMAT(reg_datetime, '%d') ORDER BY day_n ;
이퀄 검색이 아닌 범위 검색 하셔야 합니다.
DATE_ADD 의 입력값으로 '09' 를 사용하시면 안되구요.
SELECT DATE_FORMAT(reg_datetime, '%m') AS month_n , COUNT(*) AS count_li FROM TABLE WHERE 1=1 AND reg_datetime >= DATE_ADD('20160901', INTERVAL 0 MONTH) AND reg_datetime < DATE_ADD('20160901', INTERVAL 1 MONTH) GROUP BY DATE_FORMAT(reg_datetime, '%m') ORDER BY month_n ;