我在将日期列与当前日期进行比较时遇到问题。我的日期列是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"
有人可以帮忙吗?
答案 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)