SQL DATE
DATE
Самое сложное при работе с датами - это убедиться, что формат даты, которую вы пытаетесь вставить, совпадает с форматом столбца даты в базе данных.
Пока ваши данные содержат только часть даты, ваши запросы будут работать так, как и ожидалось. Однако, если задействована временная часть, все становится еще сложнее.
Типы данных даты
MySQL поставляется со следующими типами данных для хранения даты или значения даты/времени в базе данных:
- DATE - формат YYYY-MM-DD
- DATETIME - формат: YYYY-MM-DD HH:MI:SS
- TIMESTAMP - формат: YYYY-MM-DD HH:MI:SS
- YEAR - формат YYYY или YY
SQL Server поставляется со следующими типами данных для хранения даты или значения даты/времени в базе данных:
- DATE - формат YYYY-MM-DD
- DATETIME - формат: YYYY-MM-DD HH:MI:SS
- SMALLDATETIME - формат: YYYY-MM-DD HH:MI:SS
- TIMESTAMP - формат: уникальное число
Примечание: Типы дат выбираются для столбца при создании новой таблицы в базе данных!
Работа с датами
Вы можете легко сравнить две даты, если нет никакого компонента времени!
Предположим, что у нас есть следующая таблица "Orders":
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 |
Теперь мы хотим выбрать записи с порядковым номером "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 |
Теперь предположим, что таблица "Orders" выглядит следующим образом (обратите внимание на компонент time в столбце "OrderDate"):
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'
Мы не получим никакого результата! Это происходит потому, что запрос ищет только даты без временной части.
Совет: Чтобы ваши запросы были простыми и удобными в обслуживании, не допускайте компонентов времени в ваших датах!