Даты хранятся в БД как таковые: «2011-05-26 11:00:00» в поле datetime. Я хотел бы найти все строки, где дата больше, чем первая из этого месяца, то есть: 2011-05-01 09:00:00
Форматы даты в БД не могут быть изменены. Какую функцию MySQL я могу использовать для преобразования даты в БД в формат, который может обрабатывать сравнение? Я предполагаю, что лучший формат для «первого месяца» – это временная метка unix?
Значения времени в датах всегда присутствуют, но только часы работы, поэтому с 09:00 до 17:00.
Если он хранится в поле DATETIME
, просто WHERE date > '2011-05-01 09:00:00'
запрос на WHERE date > '2011-05-01 09:00:00'
.
$firstDayOfMonth = date( 'Ymd H:i:s', mktime(0,0,0,date('n'),1,date('Y')); $query = "SELECT * FROM `table` WHERE `date` >= '$firstDayOfMonth'";
Что-то вроде этого возможно?
$oDateTime = new DateTime(); $sQuery = "SELECT * FROM table WHERE date >= ".$oDateTime->format("Ym")."-01 09:00:00";
Сравните непосредственно с datetime:
WHERE date_field >= '2011-05-01 00:00:00'
Поля DATETIME
могут фильтроваться точно так же, как целые поля, например:
SELECT * FROM `table` WHERE `date` > '2011-05-01 09:00:00'
Если вы действительно хотите преобразовать метки времени Unix, посмотрите на функцию UNIX_TIMESTAMP .
Вы можете использовать функцию TIMESTAMPDIFF в MySQL для сравнения времени,
Функция FROM_UNIXTIME для форматирования временной метки Unix в качестве даты.
Дополнительные функции и примеры данных и времени mysql доступны в функции даты и времени MySQL Reference Manual .
Я думаю, что вы можете решить это, что-то вроде этого:
во-первых, создать первый день месяца в формате mysql в php
$firsDay = date('Ymd 00:00:00', strtotime(date('Y-m').'-01 00:00:00'));
и затем, используйте его в запросе
select * from something where date >= $firsDay