Выбрать данные между двумя датами? - PullRequest
2 голосов
/ 10 февраля 2012

Я использую базу данных для хранения журналов со столбцом «дата», который содержит дату, когда она была вставлена.Формат даты - «ММ / ДД / ГГ».Кто-нибудь может подсказать, как я бы ВЫБИРАЛ данные между двумя определенными датами.Например, я попробовал это:

$from_date = "01/01/12";
$to_date = "02/11/12";

$result = mysql_query("SELECT * FROM logs WHERE date >= " . $from_date . " AND date <= " . $to_date . " ORDER by id DESC");

while($row = mysql_fetch_array($result)) {
// display results here
}

Но я думаю, это не сработает, потому что даты не являются числами.Спасибо за помощь!:)

Ответы [ 5 ]

17 голосов
/ 10 февраля 2012

Используйте ключевое слово BETWEEN:

"SELECT * FROM logs WHERE date BETWEEN '" . $from_date . "' AND  '" . $to_date . "'
ORDER by id DESC"
3 голосов
/ 10 февраля 2012

Ответ на ваш вопрос зависит от типа данных, который используется для хранения поля date в таблице logs.

SQL (MySQL в вашем случае) полностью способен сравнивать даты.Обычно используется оператор BETWEEN .. AND .., но он не будет работать правильно, если тип date - это CHAR (или VARCHAR) - в этом случае вам нужно будет преобразовать поле date в DATETIME перед сравнением.*

3 голосов
/ 10 февраля 2012

Вы можете преобразовывать поля в даты и затем выбирать между from_date и to_date

SELECT * FROM logs WHERE date STR_TO_DATE(date, '%m/%d/%Y') between STR_TO_DATE(from_date, '%m/%d/%Y') and STR_TO_DATE(to_date, '%m/%d/%Y')
0 голосов
/ 22 февраля 2019

Измените параметры даты в метки времени Unix, а затем сравните их.Вот код:

$from_date = "2019/01/12";
$to_date = "2019/01/15";

$from_date_unix = strtotime($from_date);
$to_date_unix = strtotime($to_date);    

$result = mysql_query("SELECT * FROM logs WHERE date >= " . $from_date_unix . " AND date <= " . $to_date_unix . " ORDER by id DESC");
while($row = mysql_fetch_array($result)) {
// display results here
}
0 голосов
/ 10 февраля 2012

Вам необходимо добавить одинарные кавычки к значениям даты '01 / 01/12 ':

$from_date = "01/01/12";
$to_date = "02/11/12";

$result = mysql_query("SELECT * FROM logs WHERE date >= '" . $from_date . "' AND date <= '" . $to_date . "' ORDER by id DESC");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...