Выборка по дате
Сталкнулся с такой банальной проблемой =)
пишу запрос на выорку по дате select бла бла from prihod where data>’20.04.2010′ в ответ не получаю никаких записей. Поле data типа DATE, в таблице фигурирует диапазон дат с 20.04.2010 по 26.04.2010
Что делаю не правильно?
Выборка по дате
есть таблица в БД в ней есть поле date формата гггг-мм-дд нужно выбрать все поля из таблицы с.
Выборка по дате
Всем здрасте, ситуация такая что есть таблица в которой какие-то данные со связью к определённому.
Выборка по дате
Есть проблема. Вот запрос $result = mysql_query("SELECT * FROM comments LIMIT $start,$num.
Выборка по дате
users ( u_id INT AUTO_INCREMENT, u_birthday DATE, u_name VARCHAR(50), PRIMARY KEY (u_id) ) .
Формат даты SQL: 2010-04-28 23:59:59
Добавлено через 1 минуту
. WHERE DATE >= '2010-04-20' AND DATE '2010-04-26'
хмммм. а почему когда я заполняю поле даты. ну через эдит обычный скажем, я пишу через точку и сохраняется все гуд с точками.
а каквообще поменять можно на серваке формат даты? чтобы я везде делал через точку??
Сообщение от NemiroFFyo
Дак у Вас, скорее всего, поле не DATE и не DATETIME. Если хотите функционал дат, то тип поля надо сделать соответствующим.
Формат даты должен быть ‘YYYY-MM-DD HH:MM:SS’ или ‘YY-MM-DD HH:MM:SS’ (вместо — и : любые разделители), либо без разделителей ‘YYYYMMDDHHMMSS’ или ‘YYMMDDHHMMSS’.
Для дат без времени, соответственно, ‘YYYY-MM-DD’ , ‘YY-MM-DD’ , ‘YYYYMMDD’ или ‘YYMMDD’.
У меня тип поля DATE . я пытаюсь узнать почему у меня поле заполняется и отображается через точку, а в запросе нада писать через черточку. И как сделать так чтобы везде было через точку -ДД.ММ.ГГГГ
Короче он мне так ничего и не вывел. Я не знаю в чем пробла.
Добавлено через 4 часа 24 минуты
все. вроде разабрался=)
Сообщение от NemiroFFyo
SELECT тра та та FROM TABLE WHERE DATA > 'YYYY-MM-DD'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
echo '; echo 'От: До: '; echo ''; echo '
'; @$delivery_list_filter = mysql_query("SELECT * FROM delivery_list WHERE username = '$UserName' AND (date >= '$date_from' AND date $date_to') ORDER BY date"); $result2 = mysql_fetch_array($delivery_list_filter); @$date_from = $_POST['date_from']; @$date_to = $_POST['date_to']; if(isset($_POST['confirmDateFilter']) && count($result2) > 0) { @$date_from = $_POST['date_from']; @$date_to = $_POST['date_to']; @$delivery_list_filter = mysql_query("SELECT * FROM delivery_list WHERE username = '$UserName' AND (date >= '$date_from' AND date $date_to') ORDER BY date"); echo ''; while($result2 = mysql_fetch_array($delivery_list_filter)) { @$result3 = mysql_query("SELECT * FROM `managers` WHERE `mLogin`='$UserName';") or die(mysql_error()); $greeting1 = mysql_fetch_row($result3); $date = $result2['date']; $company = $result2['company']; $getter1 = $result2['getter1']; $getter2 = $result2['getter2']; $phone1 = $result2['phone1']; $phone2 = $result2['phone2']; $time_from = $result2['time_from']; $time_to = $result2['time_to']; $docs = $result2['docs']; $address = $result2['address']; $instructions = $result2['instructions']; $important = $result2['important']; echo '
'; }'; echo ' '; } echo ''.$date.' '; echo ''.$company.' ('.$greeting1[1].' '.$greeting1[2].', '.$greeting1[4].') '; if (empty($getter2) && empty($phone2)) { echo ''.$address.'. '.$getter1.', '.$phone1.'. '; } else echo ''.$address.'. '.$getter1.', '.$phone1.'. '.$getter2.', '.$phone2.'. '; echo ''.$instructions.'. '.$important.' Время: с '.$time_from.' до '.$time_to.'. Документы '.$docs.' '; echo '
Выборка c условием по дате в mysql БД через PHP
Одной из самой сложной работы в php считаю запросы в mysql по дате. Во-первых, не всегда логически просто понять что нужно выбрать если у нас сложные условия, типа: выбрать все даты из БД, которые больше такого-то отрезка времени, но меньше текущей даты увеличенной на 25 дней. Во-вторых, возникают другие проблемы от формата до самих запросов.
Начнем с формата хранения даты в БД
Вспомните тип поля timestamp, у него формат времени такой: гггг-мм-дд чч:мм:сс, например: 2017-11-05 14:23:05. Рекомендую использовать в своих базах именно этот формат, т.к. это стандарт. За счет него можно будет выгружать только время или дату, или одновременно то и другое. Не обязательно тип поля брать timestamp, можно использовать обычный text.
Примеры mysql запросов
Теперь рассмотрим практические примеры выборок по дате с учетом того, что дата записана в формате гггг-мм-дд чч:мм:сс:
1. Выбираем все записи в диапазоне: дата в БД < текущей
select * from ruefz_jcomments where DATE(date)
2. Выбираем данные за текущий месяц: дата в БД > от 1 числа этого месяца и дата < 1 числа следующего месяца
select id from tab where date > LAST_DAY(CURDATE()) + INTERVAL 1 DAY — INTERVAL 1 MONTH and date < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY)
Расшифровка: выбрать все id записи, в которых дата > последний день месяца сегодняшней даты + 1 день — 1 месяц и дата < последний день месяца сегодняшней даты + 1 день
3. Выбираем данные за текущий месяц, год и день не учитывается (%c месяц 1-12, %e дни 1-31 в mysql; n — месяц 1-12, j дни 1-31 в PHP )
select id from tab where DATE_FORMAT(date, ‘%c’)='».date(‘n’).»‘
4. За текущую неделю
select id from tab where date > DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) -1) DAY) and date < DATE_ADD(CURDATE(), INTERVAL (9 - DAYOFWEEK(CURDATE())) DAY)
5. выбираем все записи в диапазоне: (текущая — 10 дней) < дата в БД < текущая дата
select * from ruefz_jcomments where DATE(date) = DATE_SUB(NOW(), INTERVAL 10 DAY)
По этим примерам вам будет понятно, как составлять свои решения. Зачастую, при работе с датами вам потребуется использовать запросы DATE_ADD – прибавление, DATE_SUB — вычитание, CURDATE() — сегодняшняя дата, NOW() — сегодняшняя дата и время.
Изменить формат вывода времени в mysql
Если из БД надо взять дату в другом формате, мы можем изменить ее на «лету», для обработки на php скриптах:
DATE_FORMAT(date,format) — Форматирует величину date в соответствии со строкой format.
Пример:
$result = mysql_query(«SELECT DATE_FORMAT(‘1997-10-04 22:23:01’, ‘%d.%m.%Y %H:%i:%S’) AS datess FROM csv»);
while ($row=mysql_fetch_array($result)) echo $row[«datess»].»
«; >//05.11.2017 14:23:55
В последнем примере мы приводим дату из БД в читаемый вид для пользователя.
Фильтрация по полю DateTime в MySQL
Хранение данных в базе MySQL довольно часто сопряжено с полями, которые хранят значения времени и временные метки. Для этих целей в MySQL существуют несколько форматов даты и времени которые могут храниться в полях таблиц.
Давайте перечислим основные поля, используемые для хранения значений времени:
DATE – тип поля который хранит дату в формате ГГГГ-ММ-ДД;
DATETIME – поле этого типа хранит дату и время, в формате ГГГГ-ММ-ДД ЧЧ:ММ:CC;
TIMESTAMP – временная метка, формат хранения зависит от версии MySQL, и режима работы сервера баз данных.
Как правило, TIMESTAMP представляет некоторое числовое значение, которое удобно использовать при фильтрации полей, традиционными операторами сравнения. Что касается формата DATETIME, то здесь уже операция фильтрации выполняется немного иначе. Давайте рассмотрим простые примеры, как можно фильтровать записи, если у вас таблица хранит данные времени в формате DATETIME.
Фильтрация по дате в формате DateTime
В качестве задачи, мы рассмотрим пример выборки записей, до определённой даты, пусть это будет 24.05.2020. Для этого чтобы применить фильтрацию к полю DateTime мы воспользуемся функцией DATE():
SELECT * FROM m_table WHERE DATE(add_date) < '2020-05-24'
Данный запрос сделает выборку данных из таблицы m_table, выбирая записи, у которых значение даты в поле add_date не превышает указанное в условии. Либо аналогичным образом можно отфильтровать записи, у которых значение поле add_date больше указанной даты:
SELECT * FROM m_table WHERE DATE(add_date) > '2020-05-24'
Как вы можете заметить, поменялся только лишь оператор сравнения.
Фильтрация по диапазону значений DateTime
Теперь давайте рассмотрим пример с фильтрацией по диапазону. Для фильтрации мы будем использовать начальную и конечную дату. Таким образом, мы сделаем выборку записей из таблицы, соответствующие заданному диапазону:
SELECT * FROM m_table WHERE DATE(add_date) BETWEEN '2020-04-01' AND '2020-05-01'
Команда BETWEEN в запросе как раз указывает на то, что в условии будет использоваться диапазон значений.
Фильтрация по диапазону значений DateTime с временными интервалами
Нередко приходится выбирать данные с использованием интервалов времени, которые могут меняться динамически. Так к примеру, мы можем выбрать записи двухнедельной давности, а также записей, дата которых больше текущей на некоторое значение.
SELECT * FROM m_table WHERE DATE(add_date) BETWEEN DATE(CURRENT_DATE() - INTERVAL 2 WEEK) AND DATE(CURRENT_DATE() + INTERVAL 4 DAY)
Опять же, здесь задействованы такие функции как DATE(), CURRENT_DATE(), а как же команды временного интервала INTERVAL. MySQL позволяет выполнять математические операции с датами, оперируя вместе с этими функциями. Так можно увеличивать или уменьшать некоторые временные значения в запросе, динамически, в зависимости от текущего значения времени.
Функции для работы с датой и временем в MySQL
В таблицы приведён список функций, которые могут быть использованы в запросах MySQL. Этих часть этих функций бывает достаточно чтобы сформировать запросы практически с любым условием выборки данных.
Функция | Описание |
ADDDATE() | Добавление даты |
ADDTIME() | Добавление времени |
CONVERT_TZ() | Конвертация из одной временной зоны в другую |
CURDATE() | Получение текущей даты |
CURTIME() | Получение текущего системного времени |
DATE_ADD() | Добавление одной даты к другой |
MySQL DATE_FORMAT () | Приведение даты к определённому формату |
DATE() | Получение даты из даты или выражения дата-время |
DATEDIFF() | Вычитание одной даты из другой |
DAYNAME() | Получение названия дня недели |
DAYOFMONTH() | Получения дня месяца (1-31) |
DAYOFWEEK() | Получение индекса дня недели из аргумента |
DAYOFYEAR() | Получение дня года (1-366) |
EXTRACT | Получение части даты |
FROM_DAYS() | Преобразование номер дня в дату |
FROM_UNIXTIME() | Преобразование даты в формате UNIX в дату |
MySQL DATE_SUB () | Вычитание одной даты из другой |
HOUR() | Получение часа |
LAST_DAY | Получение последнего дня месяца для аргумента |
MAKEDATE() | Создание даты из года и дня года |
MAKETIME () | Получение значения времени |
MICROSECOND() | Получение миллисекунды из аргумента |
MINUTE() | Получение минуты из аргумента |
MONTH() | Получение месяца из переданной даты |
MONTHNAME() | Получение названия месяца |
NOW() | Получение текущей даты и времени |
PERIOD_ADD() | Добавление интервала к месяцу-году |
PERIOD_DIFF() | Получение количества месяцев между двумя периодами |
QUARTER() | Получение четверти часа из переданной даты в качестве аргумента |
SEC_TO_TIME() | Конвертация секунды в формат ‘ЧЧ:MM:СС’. |
SECOND() | Получение секунды (0-59) |
MySQL STR_TO_DATE () | Преобразование строки в дату |
SUBTIME() | Вычитание времени |
SYSDATE() | Получение времени, в момент которого была выполнена функция |
TIME_FORMAT() | Установка формата времени |
TIME_TO_SEC() | Получение аргумента, преобразованного в секунды |
TIME() | Получение части времени из выражения, передаваемого в качестве аргумента |
TIMEDIFF() | Вычитание времени |
TIMESTAMP() | Получение даты или выражения дата-время если используется один аргумент. С двумя аргументами возвращается их сумма |
TIMESTAMPADD() | Добавление интервала к дате-времени |
TIMESTAMPDIFF() | Вычитание интервала из даты-времени |
TO_DAYS() | Получение аргумента даты, преобразованный в дни |
UNIX_TIMESTAMP() | Получение даты-времени в формате UNIX, в формат, допускаемый в MySQL |
UTC_DATE() | Получение текущей даты в UTC |
UTC_TIME() | Получение текущего времени в UTC |
UTC_TIMESTAMP() | Получение текущей даты-времени в UTC |
WEEK() | Получение номера недели |
WEEKDAY() | Получение индекса дня недели |
WEEKOFYEAR() | Получение календарной недели даты (1-53) |
YEAR() | Получение года |
YEARWEEK() | Получение года и недели |
VK FB TW Whatsapp Telegram Email