2013-12-09 4 views
0

이상한 문제가 있습니다. 데이터베이스에 만료일을 Varchar (캘린더 플러그인으로 인해)으로 저장했습니다. 이제 테이블의 만료 된 항목을 확인해야합니다. 그래서이 varchar (문자열)을 날짜 형식으로 변환 한 다음 현재 시간과 비교하기 위해이 SQL을 작성했습니다.MYSQL의 다른 데이터 유형의 날짜 비교

SELECT date_format(str_to_date(discountEndDT,'%m/%d/%Y'), '%m/%d/%Y') as dateSale 
    FROM tbl_salestemplate where date_format(str_to_date(discountEndDT,'%m/%d/%Y'),'%m/%d/%Y')>DATE_FORMAT(NOW(),'%m/%d/%Y') 

지금이 날 결과 만 유효을 위해 사람들은 내가 그들이 오늘 날짜보다 큰 경우에도 반환되지 않습니다 2014 년 만료와 함께이 년 2013.The 날짜까지입니다 날짜를 제공합니다.

내가 뭘 잘못하고 있는지 잘 모르겠다. 모든 만료 날짜를 얻기 위해 독립 실행 형 쿼리를 실행하면 2014 년 만료 연도를 포함하여 모든 날짜가 예상대로 m/d/y 형식이됩니다. 독립 쿼리는 다음과 같습니다?

SELECT *FROM tbl_salestemplate Wheredate_format(str_to_date(discountEndDT,'%m/%d/%Y'), '%m/%d/%Y') 

은 어디에서 실제로 잘못 어떤 하나 올바른을 할 수 하겠어?

감사합니다.

+0

지금 또는 DATE (NOW()) 대신 CURDATE()를 시도하십시오 – Mihai

답변

1

이 쿼리를보십시오 :

SELECT date_format(str_to_date(discountEndDT,'%m/%d/%Y'), '%m/%d/%Y') as dateSale 
FROM tbl_salestemplate 
where str_to_date(discountEndDT,'%m/%d/%Y')>NOW() 
; 

또는 심지어이 : 사실 변환 date_format(str_to_date(discountEndDT,'%m/%d/%Y'), '%m/%d/%Y') 같은 문자열 m의 뒤쪽으로 날짜 문자열/월/일을 변환

SELECT discountEndDT as dateSale 
FROM tbl_salestemplate 
where str_to_date(discountEndDT,'%m/%d/%Y')>NOW() 
; 

때문에/d/yyyy.

이 데모를 참조하십시오 : http://www.sqlfiddle.com/#!2/59536/5


조회에 비교되지 않는 사실 날짜를하지만, 형식 문자열 비교된다 m 한 달 번호/월/일을.

데모에서 두 번째 쿼리의 결과를 살펴보십시오.
예를 들어, "03/15/2014"날짜가 "12/09/2013"보다 컸지 만 "03 ..."문자열이 "12 ..."보다 작 으면 예기치 않은 결과가 발생합니다.

+0

예 문제는 있지만 형식이 엉망이라는 것을 알고있었습니다. – coderunner

+0

감사합니다. :) – coderunner