UNIX_TIMESTAMP с датой в запросе MySQL не работает - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть даты, хранящиеся в виде varchar в базе данных MySQL.Я знаю, что это не идеально ... но это то, что у меня есть на данный момент.

Пример даты:

$start_date = "11/22/2019";
$start_date = strtotime($start_date);
$end_date = "11/29/2020";
$end_date = strtotime($end_date);

Я пытаюсь написать запрос, который проверяет, есть лидата в этом формате попадает в диапазон

У меня возникают проблемы, когда у даты начала совпадает месяц с датой окончания, но другой год.

if (!empty($start_date)) {
    $where_clause[] = "UNIX_TIMESTAMP(start_date) >= '" . $start_date . "'";
}

if (!empty($end_date)) {
    $where_clause[] = "UNIX_TIMESTAMP(end_date) <= '" . $end_date . "'";
}

Я прочитал, что UNIX_TIMESTAMPпозволил бы мне сделать это, но, похоже, он не работает.

Как я могу заставить этот запрос работать?

1 Ответ

0 голосов
/ 04 февраля 2019

Возможно, проще всего здесь будет просто сравнить ваши текстовые даты MySQL, используя STR_TO_DATE, с соответствующими литералами даты ISO в вашем PHP-коде.То есть используйте запрос в следующих строках:

SELECT *
FROM yourTable
WHERE STR_TO_DATE(start_date, '%m/%d/%Y') > ?;

Для заполнителя ? вы должны привязать значение, например date('Y-m-d', strtotime('11/22/2019')) и , а не '11/22/2019', последнее, котороев непригодном для использования формате, отличном от ISO.

Как вы упомянули в начале вашего вопроса, было бы лучше хранить все даты как типы столбцов с достоверным типом даты, а не как текст.

...