mysql 날짜검색.. 0 5 915

by 밍 [MySQL] [2016.09.29 10:53:32]


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 입니다.

by 마농 [2016.09.29 11:25:45]

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
;

 


by 밍 [2016.09.29 12:21:41]

DATE_FORMAT을 써야하는군요..ㅎㅎ

 

답변감사드립니다~


by 밍 [2016.09.29 13:20:09]
SELECT DATE_FORMAT(REG_DATETIME, '%m') AS month_n
     , COUNT(*) AS count_li
  FROM TABLE
 WHERE 1=1
   AND REG_DATETIME= DATE_ADD('09', INTERVAL 0 MONTH)
 GROUP BY DATE_FORMAT(REG_DATETIME, '%m')
 ORDER BY month_n
;

 

월별로 구하려고 이코드를 썻는데 값이 나오질않는데

어디부분이 잘못된건가요.,.?


by 마농 [2016.09.29 13:33:36]

이퀄 검색이 아닌 범위 검색 하셔야 합니다.
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
;

 


by 밍 [2016.09.29 13:40:47]

아..그러네요ㅎㅎㅎ

 

감사드립니다~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입