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