MySQL PHP - 比较字符串日期

时间:2013-12-16 16:40:28

标签: php mysql

我在将日期列与当前日期进行比较时遇到问题。我的日期列是String ('13.12.2013 17:12 - Fr.')。我不能使它成为日期字段,因为它只在Joomla Datetime选择器中作为字符串给出。

我必须选择日期>的所有行当前的日期。我尝试了一些解决方案,但没有任何效果。我当前的解决方案如下,但它仍然显示所有行,而不仅仅是日期>当前日期。

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"

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

你正在做两件事 STR_TO_DATE(res_date, '%d.%m.%Y') > DATE_FORMAT(CURDATE(), '%d.%m.%Y')

第一部分创建一个mysql DateTime值,这是你想要的。 secont部分从DataTime值创建一个字符串。 所以你要比较日期时间和字符串。通过以下方式更改它: STR_TO_DATE(res_date, '%d.%m.%Y') > CURDATE()

您可能还必须将此条件移至“HAVING”部分。

答案 1 :(得分:0)

看起来你的DATE_FORMAT(CURDATE(), '%d.%m.%Y')STR_TO_DATE(res_date, '%d.%m.%Y')片段的出现方式不同,因此无法进行比较。看看

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                         |
+------------------------------------+

尝试将NOW()用于后一部分

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)