SQL Робота з датами
SQL Дати
Найважча частина під час роботи з датами — переконатися, що формат дати, яку ви намагаєтеся вставити, відповідає формату стовпця дати в базі даних.
Поки ваші дані містять лише частину дати, ваші запити працюватимуть належним чином. Однак, якщо задіяна частина часу, це стає складнішим.
SQL Типи даних дати
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
- формат: унікальне число
Примітка: Типи дат вибираються для стовпця під час створення нової таблиці в базі даних!
SQL Робота з датами
Погляньте на наступну таблицю:
Таблиця замовлень
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" виглядає так (зверніть увагу на доданий компонент часу в стовпці "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'
Ніякого результату не отримаємо! Це тому, що запит шукає лише дати без часової частини.
Порада: Щоб ваші запити були простими та легкими для обслуговування, не використовуйте компоненти часу у своїх датах, якщо це не потрібно!