MySQL pracuje z datami
Daty MySQL
Najtrudniejszą częścią pracy z datami jest upewnienie się, że format daty, którą próbujesz wstawić, odpowiada formatowi kolumny daty w bazie danych.
Dopóki Twoje dane zawierają tylko część dotyczącą daty, Twoje zapytania będą działać zgodnie z oczekiwaniami. Jeśli jednak w grę wchodzi część czasu, sprawa staje się bardziej skomplikowana.
Typy danych MySQL
MySQL zawiera następujące typy danych do przechowywania daty lub wartości daty/czasu w bazie danych:
-
DATE
- format RRRR-MM-DD -
DATETIME
- format: RRRR-MM-DD GG:MI:SS TIMESTAMP
- format: RRRR-MM-DD GG:MI:SS-
YEAR
- format RRRR lub RR
Uwaga: Typ danych data jest ustawiany dla kolumny podczas tworzenia nowej tabeli w bazie danych!
Praca z datami
Spójrz na poniższą tabelę:
Tabela zamówień
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 |
Teraz chcemy wybrać rekordy z datą zamówienia „2008-11-11” z powyższej tabeli.
Używamy następującego SELECT
oświadczenia:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
Zestaw wyników będzie wyglądał tak:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
3 | Mozzarella di Giovanni | 2008-11-11 |
Uwaga: Dwie daty można łatwo porównać, jeśli nie ma w tym składnika czasu!
Teraz załóżmy, że tabela „Orders” wygląda tak (zwróć uwagę na dodany składnik czasu w kolumnie „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 |
Jeśli użyjemy tego samego SELECT
stwierdzenia co powyżej:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
nie otrzymamy żadnego wyniku! Dzieje się tak, ponieważ zapytanie szuka tylko dat bez części czasowej.
Wskazówka: Aby zapytania były proste i łatwe w utrzymaniu, nie używaj w datach elementów czasowych, chyba że musisz!