2013-12-16 5 views
0

У меня проблема с сопоставлением столбца даты с текущей датой. Столбец «Мой день» - String ('13.12.2013 17:12 - Fr.'). Я не могу сделать это поле даты, потому что оно дается только как String в Joomla Datetime picker.MySQL PHP - Сравнить String Date

Мне нужно выбрать все строки с датой> текущей датой. Я пробовал некоторые решения, но ничего не работает. Мое текущее решение выполняется, но оно все еще показывает все строки, а не только те, где date> текущая дата.

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

Я бы порекомендовал разместить вопрос о "Как сохранить результат Joomla Datetime в столбце MySQL DATETIME". Требования (в этом случае требование наличия значения DATETIME) должно определять ваши типы данных. Передняя часть должна * никогда * не диктовать ваш тип данных. –

+0

Проблема в том, что она мне нужна, как я уже говорил, «13 .12.2013 17:12 - о.». дату, время и день недели. Или есть какое-то решение, чтобы сохранить его таким образом в datetime col? – eScoo

+0

вы можете изменить формат даты в INI-файле языка. –

ответ

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

Спасибо, это работает отлично! Но почему здесь не работает =? – eScoo

+0

'> СЕЙЧАС() - интервал 1 день' работает здесь. Проблема решена, спасибо! – eScoo

1

Вы делаете 2 противоположные вещи с 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