MySQL работает с датами
Даты MySQL
Самое сложное при работе с датами — убедиться, что формат даты, которую вы пытаетесь вставить, соответствует формату столбца даты в базе данных.
Пока ваши данные содержат только часть даты, ваши запросы будут работать должным образом. Однако, если речь идет о временной части, все становится сложнее.
Типы данных даты MySQL
MySQL поставляется со следующими типами данных для хранения даты или значения даты/времени в базе данных:
-
DATE
- формат ГГГГ-ММ-ДД -
DATETIME
- формат: ГГГГ-ММ-ДД ЧЧ:МИ:СС TIMESTAMP
- формат: ГГГГ-ММ-ДД ЧЧ:МИ:СС-
YEAR
- формат ГГГГ или ГГ
Примечание. Тип данных даты устанавливается для столбца при создании новой таблицы в базе данных!
Работа с датами
Посмотрите на следующую таблицу:
Таблица заказов
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
2 | Camembert Pierrot | 2008-11-09 |
3 | Mozzarella di Giovanni | 2008-11-11 |
4 | Mascarpone Fabioli | 2008-10-29 |
Теперь мы хотим выбрать записи с OrderDate "2008-11-11" из таблицы выше.
Мы используем следующее SELECT
утверждение:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
Набор результатов будет выглядеть следующим образом:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
3 | Mozzarella di Giovanni | 2008-11-11 |
Примечание. Две даты можно легко сравнить, если не используется компонент времени!
Теперь предположим, что таблица «Заказы» выглядит так (обратите внимание на добавленный компонент времени в столбце «Дата заказа»):
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 13:23:44 |
2 | Camembert Pierrot | 2008-11-09 15:45:21 |
3 | Mozzarella di Giovanni | 2008-11-11 11:12:01 |
4 | Mascarpone Fabioli | 2008-10-29 14:56:59 |
Если мы используем то же SELECT
утверждение, что и выше:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
мы не получим никакого результата! Это связано с тем, что запрос ищет только даты без временной части.
Совет: чтобы ваши запросы были простыми и легкими в обслуживании, не используйте компоненты времени в датах, если в этом нет необходимости!