Обходное решение для запроса дат в PHP для текстового поля - PullRequest
0 голосов
/ 15 октября 2018

Я не могу понять, почему следующее не работает, и теперь я понимаю, что мой тип поля в MySQL - это текст ...

SELECT * 
FROM Scans 
WHERE Date BETWEEN '$sdate' AND '$edate'

$sdate и $edate - определенные датыв формате 01/01/2018.Кроме того, они хранятся в базе данных под столбцом Date.

. Есть ли какой-нибудь обходной путь, который позволяет мне искать даты, но со строками и текстовыми полями?

1 Ответ

0 голосов
/ 15 октября 2018

Преобразуйте даты в формат YYYY-MM-DD в PHP перед построением SQL, а затем данных в таблице, например:

$sdate = date('Y-m-d', strtotime($sdate));
$edate = date('Y-m-d', strtotime($edate));

и в SQL:

SELECT * 
FROM Scans 
WHERE str_to_date(`Date`,"%d/%m/%Y") BETWEEN '$sdate' AND '$edate'

Если вы можете перенести тип поля базы данных с text на date и перенести содержимое, то это позволит вам удалить часть str_to_date( Date ,"%d/%m/%Y"), но $sdate и $edateвсе еще должен быть в формате ГГГГ-ММ-ДД.

Безопасная миграция означает:

  1. создать временное поле
  2. для чтения из столбца даты
  3. преобразовать вГГГГ-ММ-ДД
  4. записать его во временный столбец
  5. изменить тип поля столбца Дата на дату
  6. скопировать данные обратно
  7. удалитьвременный столбец
...