2013-12-09 66 views
0

面對一個奇怪的問題。我已經在我的數據庫中存儲了一個到期日期Varchar(由於日曆插件)。我現在必須檢查表中過期的項目。 所以我寫了這個SQL,首先將varchar(string)轉換爲日期格式,然後與當前時間進行比較。在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') 

現在,這給了我結果,但只爲到期日期這些都是直到今年2013.The日期我有有效期在2014年,即使他們比今天更大的日期不會返回。

不知道我在做什麼錯。如果我運行獨立查詢來獲取所有到期日期,我會得到所有日期,包括預期的m/d/y格式的2014年到期年份。 的獨立查詢:

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

我在哪裏其實走錯了能有一個人正確的?

謝謝。

+0

嘗試CURDATE()而不是現在或DATE(NOW()) – 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() 
; 

甚至這樣的:

SELECT discountEndDT 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')將字符串轉換米/ d/yyyy的更新,然後再返回到相同的字符串米/ d/yyyy的。

看到這個演示:http://www.sqlfiddle.com/#!2/59536/5


您的查詢不正確的比較日期,但比較格式字符串:M/d/YYYY,其中m是月數。

查看演示中第二個查詢的結果。
例如,日期「03/15/2014」比「2013年9月12日」更大,但字符串「03 ...」小於「12 ...」,因此會得到意想不到的結果。

+0

是的我知道這是問題,但與格式搞砸了! – coderunner

+0

謝謝你幫助了很多! :) – coderunner