2013-12-16 111 views
0

我有一個問題,比較我的日期列與當前日期。我的日期列是String ('13.12.2013 17:12 - Fr.')。我不能使它成爲一個日期字段,因爲它只在Joomla Datetime選擇器中作爲字符串提供。MySQL PHP - 比較字符串日期

我必須選擇日期>當前日期的所有行。我嘗試了一些解決方案,但沒有任何工作。我目前的解決方案如下,但它仍然顯示所有行,不僅是日期>當前日期的行。

SELECT * FROM jtmpl2_chronoforms_data_test_reservierung 
WHERE res_bestaetigt = 'yes' AND res_deleted = 0 
    AND STR_TO_DATE(res_date, '%d.%m.%Y') > DATE_FORMAT(CURDATE(), '%d.%m.%Y') 
ORDER BY STR_TO_DATE(res_date, '%d.%m.%Y %H:%i') ASC" 

任何人都可以幫忙嗎?

+1

我建議發佈一個關於「如何在MySQL DATETIME列中存儲Joomla Datetime選擇器結果」的問題。要求(在這種情況下,您需要有DATETIME值)應該確定您的數據類型。前端應該永遠不會*指定你的數據類型。 –

+0

問題是,我完全需要它,'13.12.2013 17:12 - Fr.'。日期,時間和星期幾。或者是否有任何解決方案像這樣在日期時間欄中保存它? – eScoo

+0

您可以在語言的ini文件中更改日期格式.. –

回答

0

看起來你的DATE_FORMAT(CURDATE(), '%d.%m.%Y')出現不同於STR_TO_DATE(res_date, '%d.%m.%Y')一塊,因此失敗的比較。使用NOW()爲後來的一塊看看

mysql> select DATE(STR_TO_DATE('13.12.2013 17:12 - Fr.', '%d.%m.%Y')); 
+---------------------------------------------------------+ 
| DATE(STR_TO_DATE('13.12.2013 17:12 - Fr.', '%d.%m.%Y')) | 
+---------------------------------------------------------+ 
| 2013-12-13            | 
+---------------------------------------------------------+ 

mysql> select DATE_FORMAT(CURDATE(), '%d.%m.%Y'); 
+------------------------------------+ 
| DATE_FORMAT(CURDATE(), '%d.%m.%Y') | 
+------------------------------------+ 
| 16.12.2013       | 
+------------------------------------+ 

嘗試

mysql> select DATE(NOW()); 
+-------------+ 
| DATE(NOW()) | 
+-------------+ 
| 2013-12-16 | 
+-------------+ 

則比較正常工作

mysql> select DATE(STR_TO_DATE('13.12.2013 17:12 - Fr.', '%d.%m.%Y')) > DATE(NOW()); 
+-----------------------------------------------------------------+ 
| DATE(STR_TO_DATE('13.12.2013 17:12 - Fr.', '%d.%m.%Y')) > NOW() | 
+-----------------------------------------------------------------+ 
|                0 | 
+-----------------------------------------------------------------+ 
1 row in set, 1 warning (0.00 sec) 

mysql> select DATE(STR_TO_DATE('13.12.2013 17:12 - Fr.', '%d.%m.%Y')) < DATE(NOW()); 
+-----------------------------------------------------------------+ 
| DATE(STR_TO_DATE('13.12.2013 17:12 - Fr.', '%d.%m.%Y')) < NOW() | 
+-----------------------------------------------------------------+ 
|                1 | 
+-----------------------------------------------------------------+ 
1 row in set, 1 warning (0.00 sec) 
+1

謝謝,這工作正常!但爲什麼不>在這裏工作? – eScoo

+0

'> NOW() - 間隔1天'在這裏工作。問題解決了,謝謝! – eScoo

1

你正在做的兩個相對的事情 STR_TO_DATE(res_date, '%d.%m.%Y') > DATE_FORMAT(CURDATE(), '%d.%m.%Y')

的第一部分創建一個mysql DateTim電子價值,這是你想要的。 secont部分從DataTime值中創建一個字符串。 所以你在比較日期時間和字符串。將其更改爲以下方式: STR_TO_DATE(res_date, '%d.%m.%Y') > CURDATE()

您可能還必須將此條件移至「HAVING」部分。

+0

他們爲什麼需要將條件移至HAVING子句? – gwaigh

+0

你說得對,我不知道我在想什麼。 – Daniel82