2013-08-28 10 views
1

date_created이라는 테이블 열이 있습니다. 여기서 datetime 값을 VARCHAR로 저장합니다. 16-06-2013 10:49:29varchar로 저장된 두 datetime 열 사이의 시간 차이 찾기

견인 날짜 사이에 mysql 쿼리를 통해 결과를 얻고 싶습니다.

... WHERE date_created BETWEEN '06-08-2013 22:30:18' AND '28-08-2013 22:30:22' ... 

이 쿼리 반환 결과를하지만 결과는 매월 between 06 and 28있는 오래된 날짜의 기록을 포함한다 :이 같은 쿼리를 사용하고 있습니다. 또한 <과>를 사용하지만 이것도 작동하지 않습니다. 당신은 MySQL의 기능 STR_TO_DATE을 사용할 수 있습니다 22시 30분 18초 -08-2013 06 사이에 '와 '28 -08-2013 22시 30분 22초'

+0

왜 'varchar'에 저장 하시겠습니까? [올바른 데이터 유형] (http://dev.mysql.com/doc/refman/5.7/en/datetime.html)을 사용하십시오. –

+0

고마워요 @MattJohnson. 나는이 데이터 유형을 알고있다. 하지만 난 날짜에 ​​대한 VARCHAR를 사용하여 실수를했습니다. VARCHAR를 TIMESTAMP로 변환 할 수 있습니까? –

+0

데이터를 마이그레이션하여 올바르게 쿼리 할 수 ​​있도록해야합니다. 쿼리 중에이 작업을 수행하려고하면 적절한 인덱스를 작성할 수 없으며 성능이 저하됩니다. –

답변

7

어떻게 레코드 만 포함하는 결과를 얻을 수 있습니다 문자열을 DATETIME으로 포맷팅한다.

SELECT STR_TO_DATE('06-08-2013 22:30:18', '%d-%m-%Y %H:%i:%s'); 
# 2013-08-06 22:30:18 

모든 VARCHAR를 단일 UPDATE로 DATETIME으로 다시 포맷하고 코드를 수정하는 것이 좋습니다.

+0

모든 VARCHAR를 DATETIME으로 다시 포맷하십시오. 그 단일 업데이트 란 무엇입니까? –

+2

UPDATE ... SET date_created = STR_TO_DATE (date_created, '% d- % m- % Y % H : % i : % s') 그런 다음이 열을 DATETIME으로 변경하십시오. –

1

STR_TO_DATE 함수를 사용하여 날짜 문자열을 비교에 사용할 수있는 날짜로 변환해야합니다.

STR_TO_DATE(date_created, '%d-%m-%Y %H:%i:%s') BETWEEN STR_TO_DATE('06-08-2013 22:30:18', '%d-%m-%Y %H:%i:%s') AND STR_TO_DATE('28-08-2013 22:30:22', '%d-%m-%Y %H:%i:%s') 
관련 문제