2013-05-01 42 views
1

嘿,我有一個查詢工作正常,但由於某種原因,今天它並沒有,我懷疑它與月份變化有關。與date_format的日期比較沒有按預期方式執行

這個查詢:

select 
if((date_format("28/04/13","%d/%m/%y") < date_format(NOW(),"%d/%m/%y")),'ok','not ok') 

將打印not ok雖然期限應滿足。

我的值不是一個字符串,而是一個TIMESTAMP列。

注:我想讓它顯示ok只有當一天已經過去了,今後的date_format 我真正的查詢具有where子句,以獲得記錄,如果今天不是今天的日期是不是在這些參數後6這是完整的條款,不運作:

and ifnull(date_format(a.daily_check,"%d/%m/%y"), 
date_format(now()- interval 2 day,"%d/%m/%y")) < NOW() 
and ifnull(date_format(a.daily_check,"%d/%m/%y 06:00"), 
now()- interval 2 day) < date_format(NOW(),"%d/%m/%y %h:%I") 

任何人都知道爲什麼?

我對MySQL的版本5.5.28

回答

0

,你不應該使用DATE_FORMAT()而是STR_TO_DATE()

IF(STR_TO_DATE('28/04/13', '%d/%m/%y') < CURDATE(), 'ok', 'not ok') 

DATE_FORMAT() =>日期字符串
STR_TO_DATE() =>字符串迄今

你的問題是,因爲你使用date_format字符串比較occoures而不是日期。要麼將它包裝在str_to_time中,要麼更改邏輯

+0

Ya既是字符串的值,也是來自日期列的字符串,它不是字符串,而是使用date_format仍然不起作用。 – 2013-05-01 08:30:38

+0

如果這是一個日期,他們都不需要。 – 2013-05-01 08:31:43

+0

是的,我想我忘了提及我希望它只在一天過去後才顯示'ok',對不起。 – 2013-05-01 08:34:27