Ищите и получайте записи с даты множественного форматирования в php - PullRequest
0 голосов
/ 03 сентября 2018

Я сохранил дату в разных форматах, таких как 29-06-1991, 29.06.1991, 29/06/1991 в моей таблице БД. Мне нужен поисковый запрос, чтобы получить все записи за 29 июня 1991 года.

$query = JFactory::getDbo()->getQuery(true);
$query->select('*');        
$query->from('#__orders');
$query->where('STR_TO_DATE(orderdateis,'%d-%m/%Y') ='.$db->Quote($rentaldate));
$db->setQuery($query);

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Так как меняются только ваши разделители (не порядок числовых значений), вы можете очень эффективно использовать LIKE с подчеркиванием, чтобы отметить, где любой символ будет соответствовать.

По сути, вы подготавливаете переменную php в соответствии с запросом. ( Демо )

$rentaldate = '29.06.1991';
$query->where("orderdateis LIKE " . $db->q(str_replace('.', '_', $rentaldate));

Или вы можете оставить свою переменную без изменений и использовать более дорогой вызов REGEXP, чтобы использовать «магию» ., которая представляет «любой символ»: ( Demo )

$rentaldate = '29.06.1991';
$query->where("orderdateis REGEXP " . $db->q($rentaldate))

Я рекомендую первое. Я также должен заявить, что это можно сделать с помощью более альтернативных методов, но, как я уже упоминал в своем предыдущем вопросе, вы всегда должны хранить значения даты в столбцах типа даты для простоты обработки.

STR_TO_DATE() - полезная функция, но она плохо подходит для вашей задачи, поскольку требует указания формата входящей даты, чтобы он мог правильно прочитать строку. К сожалению, ваши строки даты различаются по формату.

0 голосов
/ 03 сентября 2018

Я думаю, что проблема с кавычками, попробуйте изменить ниже

$ query-> where ('STR_TO_DATE (orderdateis,'% d-% m /% Y ') ='. $ Db-> Quote ($ rentaldate));

до

$ query-> where ("STR_TO_DATE (orderdateis, '% d-% m /% Y') =". $ Db-> Quote ($ rentaldate));

Попробуйте выполнить запрос на консоли MySQL

Вы можете использовать следующий API для получения дампа запроса

echo $ query-> dump (); jexit ();

...