select date_format(now(), '%Y-%m-%d %H:%i:%s')
이런 식의 날자 변환의 경우
2010-11-10 오후 11:23:19 - > 2010-11-10 23:23:19 로 정상 변환이 되지만
아래의 테스트 경우
SELECT DATE_FORMAT('2010-10-05 오후 9:29:07','%Y-%m-%d %H:%i:%s')
2010-11-10 오후 11:23:19 - > 2010-11-10 00:00:00 로 변환 된다.. 왜일까?????
이와 같은 텍스트를 임의로 입력하여 변환하는 경우 오라클 처럼 sysdate 데이터형으로 더미쿼리가 변환하여 테스트 되는것이 아니다.
mysql 에서는 저런 형식으로 입력하고 테스트하면 datetime 형식으로 자동 변환하여 포멧을 변경하는것이 아니다..
그냥 스트링을 저형식으로 변경하다보니
당연히 결과로 날짜 검색이라던가 할수가 없다...;;; 물론 테스트상이지만...
실제 테스트할 테이블의 컬럼데이터형이 datetime 형식이라면 그 테이블에 now() 와 컬럼명으로 테스트 하는 것이 좋다.
또한 날짜의 차이.. timediff 함수를 사용하여
TIMEDIFF(DATE1, DATE2) ========== DATE1에서 DATE2를 뺀 나머지 시간.
TIMEDIFF( date_format(now(), '%Y-%m-%d %H:%i:%s'), date_format(chag_dt, '%Y-%m-%d %H:%i:%s') )
2010-11-12 00:41:39 - 2010-10-22 16:47:22 = 20.07:54:17 의 결과는 잘 나오는 편이다... (?)
잘나오는 편이라고 한 이유를 설명하겠다..
(아니 디비가 정확하게 나와야지 잘나오는 편은 뭐야 하며 짜증을 내며 발견한 것이다)
너무 큰 날짜 차이를 검색 하게 되면 TIMEDIFF 의 결과는 항상 34.22:59:59 를 넘지 못한다!!!!!!!!!!!!!
날짜가 34 일을 넘지 않으면 상관없다 치지만... 기분나쁘지 않은가..-_-
그래서 사용한 것이
아 여기서 주의점은 앞에서 DATE1, DATE2 순으로 넣었다면 이번엔 반대로 넣어야한다
DATE2, DATE1
SELECT TIMESTAMPDIFF(YEAR,'1010-11-11 10:12:01','2011-12-12 11:11:20')
SELECT TIMESTAMPDIFF(MONTH,'1010-11-11 22:12:01','2011-12-12 23:11:20')
SELECT TIMESTAMPDIFF(DAY,'1010-11-11 22:12:01','2011-12-12 23:11:20')/365
SELECT TIMESTAMPDIFF(MINUTE,'1010-11-11 오후 10:12:01','2011-12-12 오후 11:11:20') /60/24
SELECT TIMESTAMPDIFF(SECOND,'1010-11-11 22:12:01','2011-12-12 23:11:20')/60
SELECT TIMESTAMPDIFF(SECOND,'1010-11-11 오후 10:12:01','2011-12-12 오후 11:11:20')
timestampdiff 는 이상하게 string형도 잘 계산하는듯 하며
1001 년까지 나눗셈으로 계산해봤는데도 거의(?이제 DB를 못믿겠따) 데이터가 맞는듯하다
-----------------------------------------------------------------------------------------
아 착오가 있었다.. 이방법으로 입력하여도 STRING 형으로 인식하는듯 하다
SELECT TIMESTAMPDIFF(SECOND,'1010-11-11 22:12:01','2011-12-12 23:11:20') =31591213159
SELECT TIMESTAMPDIFF(SECOND,'1010-11-11 오후 10:12:01','2011-12-12 오후 11:11:20') =31591209600
SELECT TIMESTAMPDIFF(SECOND,'1010-11-11 22:12:01','2011-12-12 오후 11:11:20') =31591129679
각자 다른결과가 나왔다.. DATETIME 필드를 이용하여 테스트하자 -_-
-----------------------------------------------------------------------------------------
좋은 예는
TIMESTAMPDIFF( SECOND, (date_format(chag_dt, '%Y-%m-%d %H:%i:%s')) ,(date_format(now(), '%Y-%m-%d %H:%i:%s')) )
이런 일들을 격으면서 드는 생각은 DB에서 제공해주는 함수도
날짜 계산에 정확한 결과를 엊지 못함에 실망감을 느끼며, function 을 새로 만들어야하나.. 하는 생각이든다..
누가 만들어놓은게 있으면 난찾아쓰는게 좋은데.. 사서고생하고 싶지않아서이다..
아무튼 프로젝트별로 항상 date type로 별것 아니라고 생각하는데 고생하는 경우가 많은것 같아서
정말 데이터 타입또는 날짜비교 function 등이 필요할지도 모르겠다.. mysql은 믿을수가 없으니..
'연구개발 > MYSQL' 카테고리의 다른 글
mysql row format (0) | 2014.05.05 |
---|---|
[MySQL 5.6] TIMESTAMP and DATETIME 기능개선 (0) | 2014.05.05 |
[MYSQL] TIMESTAMPDIFF (0) | 2014.05.05 |
MySQL - 저장 프로시저(Stored Procedure), 커서(Cursor) 사용 예제 (0) | 2014.05.04 |
MySQL 5.X - FUNCTION,PROCEDURE 만들기 예제 (0) | 2014.05.04 |