daty i godziny są bardzo frustrujące typy danych i SQL nie czyni ich łatwiejsze do pracy niż w innych językach. Podczas gdy Data i czas są w rzeczywistości zupełnie różnymi typami danych, często są one scalane w typ danych datetime. Same daty i godziny SQL są dość proste, mimo że wymagają specjalnego formatowania. Jednak połączenie tych dwóch może być jednym z najbardziej bolesnych zadań, z którymi będziesz musiał zmierzyć się we wczesnych latach. Dobrą zasadą jest, aby używać czasu i daty Tylko razem, gdy absolutnie trzeba lub będzie trzeba w przyszłości. Wyjaśnię, dlaczego daty i godziny komplikują sprawy w ciągu minuty. Po pierwsze, przyjrzyjmy się, jak łatwe życie, gdy po prostu pracować z dat.
praca z datami SQL
nasza tabela „użytkownicy”:
id | username | first | last | member_since |
---|---|---|---|---|
1 | ohBillNotAgain | Hillary | Clinton | 2011-12-25 |
2 | internetCreator | Al | Gore | 2011-12-8 |
3 | dontMessWithTexas | George | Bush | 2011-7-9 |
Let’s try to get all of our members before December 25, 2011.
przykład
SELECT *FROM UsersWHERE member_since < '2011-12-25'
wynik
id | nazwa użytkownika | pierwszy | ostatni | member_since |
---|---|---|---|---|
2 | internetcreator | al | Gore | 2011-12-8 |
3 | dontmesswithtexas | George | Bush | 2011-7-9 |
w porządku, powiedzieliśmy przed 25 grudnia 2011, co oznacza, że biedna Hillary nie jest uwzględniona, ponieważ jest w tym dniu. Al ledwo zdążył, ale Stary George był na długo przed naszą datą odcięcia. Powinniśmy porozmawiać o tym, co się stało. Do where member_since < '2011-12-25′, wiemy co robiliśmy. Możemy zgadnąć, co tu się dzieje, ale pokonam martwego konia. Sprawdzamy naszą kolumnę member_since, aby sprawdzić, czy jest ona mniejsza niż<, nasza data, która została zapisana w pojedynczych cudzysłowach jako '2011-12-25′. Często podczas googlowania o pomoc z datami, widzisz tę składnię określaną jako’ RRRR-MM-DD’, gdzie Y oznacza rok, M oznacza miesiąc, A D oznacza dzień, oczywiście. Każde powtórzenie jest symbolem pustej przestrzeni znaków dla tego elementu. Więc chcesz tylko 2 cyfry na miesiąc, bo to ma sens, a może nie obchodzi cię pierwsze 2 znaki roku. Zamiast tego po prostu napisz, YY, aby uzyskać 11. Łatwo, na wspaniałe DATETIMEs
używając DATETIME w SQL
nasza nowa tabela „użytkownicy”:
id | username | first | last | last_login |
---|---|---|---|---|
1 | ohBillNotAgain | Hillary | Clinton | 2011-12-24 12:59:15 |
2 | internetCreator | Al | Gore | 2011-12-24 11:53:25 |
3 | dontMessWithTexas | George | Bush | 2011-12-24 16:24:17 |
teraz staramy się uzyskać wszystkich naszych członków, którzy zalogowali się przed 13:00 24 grudnia 2011.
przykład
SELECT * FROM UsersWHERE last_login < '2011-12-24 13:00:00'
wynik
id | nazwa użytkownika | pierwszy | ostatni | last_login |
---|---|---|---|---|
1 | ohbillnotagain | Hillary | Clinton | 2011-12-24 12:59:15 |
2 | internetcreator 2011-12-24 11:53:25 |
biedny George… w porządku, dokładnie taka sama składnia jak ostatnia z wyjątkiem, że zastąpiliśmy nazwę kolumny i użyliśmy ciągu DATETIME do porównania. Typ danych DATETIME zawiera wszystkie te same elementy co typ danych DATE plus łańcuch czasowy. Często określany jako’ YYYY-MM-DD HH:MM:SS ’ ponownie, w pojedynczych cytatach i ze spacją oddzielającą łańcuch daty od łańcucha czasu, tworzymy łańcuch daty dla porównania. Hillary i Al robią cięcie, bo zalogowali się przed ’ 2011-12-24 13: 00:00 ’ odciąć DATETIME. Tutaj jest o wiele łatwiej niż wygląda w praktyce. To dlatego, że ręcznie wkładamy łańcuch DATETIME. SQL ma kilka funkcji daty, z którymi możesz się bawić, które możesz zastąpić naszym ciągiem znaków:
ważne funkcje daty SQL
Uwaga: funkcje daty SQL różnią się znacznie w różnych wersjach SQL. To są MySQL.
- CURDATE() – pobiera bieżącą datę
- CURTIME() – Pobiera bieżący czas
- NOW() – pobiera zarówno datę, jak i czas (w formacie DATETIME)
Jeśli nie używasz MySQL, rozważ przełączenie. Żartuję, ale bez obaw, proste zapytanie Google pomoże Ci znaleźć odpowiednie funkcje SQL dla twojej bazy danych SQL.