Wprowadzenie
Możliwość przechowywania wartości dat w bazie danych umożliwia dodanie elementu czasu do zapytań i analizę danych. Ważne jest, aby wiedzieć, jak pracować z typami dat w odpowiedniej bazie danych, aby móc dokładnie raportować, niezależnie od tego, czy chodzi o informacje o zamówieniach, wiek osób, czy o jakikolwiek inny przypadek użycia.
W tym przewodniku omówimy przechowywanie DATE
typy w PostgreSQL i różne sposoby pracy z nimi.
PostgreSQL DATE
typ danych
DATE
typ w PostgreSQL może przechowywać datę bez powiązanej wartości czasu:
DATE
PostgreSQL używa 4 bajtów do przechowywania wartości daty. Zakres wartości dla wartości dat w PostgreSQL to 4713 BC do 5874897 AD.
Podczas przechowywania wartości daty PostgreSQL używa yyyy-mm-dd
format np. 1994-10-27. Ten format jest również używany w PostgreSQL do wstawiania danych.
W PostgreSQL można ustawić domyślną wartość daty bieżącej. Można to zrobić podczas tworzenia tabeli za pomocą DEFAULT
i CURRENT_DATE
słowa kluczowe. last_checkout
kolumna z naszej bibliotecznej tabeli kasy domyślnie przyjmuje aktualną datę:
CREATE TABLE checkouts ( author_id serial PRIMARY KEY, author_name VARCHAR (255) NOT NULL, book_title VARCHAR (255) NOT NULL, published_date DATE NOT NULL, last_checkout DATE NOT NULL DEFAULT CURRENT_DATE);
Podążając za tą strukturą tabeli, możemy wstawić dane za pomocą INSERT INTO
oświadczenie:
INSERT INTO checkouts (author_name, book_title, published_date)VALUES('James Joyce', 'Ulysses', '1922-02-02');
Następnie podczas zapytania o checkouts
tabeli, otrzymujemy:
SELECT * FROM checkouts; author_id | author_name | book_title | published_date | last_checkout -----------+-------------+------------+----------------+--------------- 1 | James Joyce | Ulysses | 1922-02-02 | 2021-09-27(1 row)
PostgreSQL DATE
funkcje
Znając tajniki DATE
wpisz PostgreSQL, wtedy będziesz mógł używać funkcji operujących na przechowywanych przez Ciebie informacjach. Przejdziemy przez niektóre typowe funkcje oparte na tabeli wprowadzonej w poprzedniej sekcji.
Pobierz aktualną datę
W PostgreSQL możesz uzyskać aktualną datę i godzinę za pomocą wbudowanej funkcji NOW()
funkcjonować. Poniższe oświadczenie zwróci zarówno dzień, jak i godzinę:
SELECT NOW(); now ------------------------------- 2021-09-27 15:22:53.679985+02(1 row)
Jeśli godzina nie jest interesująca, możesz również określić, aby zwracać tylko datę z podwójnymi dwukropkami ::
aby przesłać DATETIME
wartość na DATE
wartość:
SELECT NOW()::date; now ------------ 2021-09-27(1 row)
Używając CURRENT_DATE
to kolejny sposób na uzyskanie aktualnej daty, jak pokazano poniżej:
SELECT CURRENT_DATE; current_date -------------- 2021-09-27(1 row)
Wszystkie trzy z tych opcji zwrócą datę w yyyy-mm-dd
format. W PostgreSQL możesz w razie potrzeby dostosować format tego wyjścia.
Wypisz wartość daty w określonym formacie
Aby wyprowadzić wartość daty w określonym formacie, użyj funkcji TO_CHAR()
funkcjonować. Ta funkcja przyjmuje dwa parametry:
- wartość, którą chcesz sformatować
- szablon definiujący format wyjściowy
SELECT TO_CHAR(NOW()::date, 'dd/mm/yyyy'); to_char ------------ 27/09/2021(1 row)
Możesz również wyświetlić datę w formacie takim jak Sep 27, 2021
:
SELECT TO_CHAR(NOW():: DATE, 'Mon dd, yyyy'); to_char -------------- Sep 27, 2021(1 row)
W zależności od wymagań systemu może być potrzebna data sformatowana w określony sposób. W tym scenariuszu przydatna jest możliwość określenia danych wyjściowych w PostgreSQL.
Pobierz odstęp między dwiema datami
PostgreSQL pozwala uzyskać interwał między dwiema datami za pomocą -
operator. Korzystanie z tego operatora pozwala obliczyć takie rzeczy, jak staż pracy pracownika lub czas od opublikowania książki.
W naszym przykładzie chcemy sprawdzić, ile dni minęło od Ulissesa Joyce'a został opublikowany przez odjęcie bieżącej daty od published_date
:
SELECT author_name, book_title, now()::date - published_date as diffFROM checkouts;
Wynik:
author_name | book_title | diff -------------+------------+---------------------------- James Joyce | Ulysses | 36397 days (1 row)
Obliczanie wieku na podstawie wartości dat
Możemy kontynuować ten sam przykład, aby obliczyć wiek na bieżącą datę w latach, miesiącach i dniach za pomocą AGE()
funkcjonować. Poniższa instrukcja używa AGE()
funkcja obliczania wieku publikacji z naszej biblioteki checkouts
stoły:
SELECT author_name, book_title, AGE(published_date)FROM checkouts;
Za pomocą tej funkcji możemy obliczyć, ile lat ma książka w ekwipunku:
author_name | book_title | age -------------+------------+------------------------- James Joyce | Ulysses | 99 years 7 mons 25 days(1 row)
Ważne jest, aby pamiętać, że jeśli przekażesz pojedynczą datę do AGE()
funkcja, to automatycznie użyje bieżącej daty do odejmowania i obliczania. Możesz również podać dwie daty do funkcji obliczania wieku, takie jak:
SELECT author_name, book_title, AGE('2000-01-01',published_date),FROM checkouts;
Wynik:
author_name | book_title | age -------------+------------+-------------------------- James Joyce | Ulysses | 77 years 10 mons 27 days(1 row)
Wyodrębnianie roku, kwartału, miesiąca, tygodnia lub dnia z wartości daty
Ostatnią funkcją, którą omówimy, jest EXTRACT()
funkcja w PostgreSQL, która pozwala oddzielić składniki daty, takie jak rok, kwartał, miesiąc i dzień.
Poniższe oświadczenie wyciąga rok, miesiąc i dzień z opublikowanej daty Ulyssesa :
SELECT author_name, book_title, EXTRACT(YEAR FROM published_date) AS YEAR, EXTRACT(MONTH FROM published_date) AS MONTH, EXTRACT(DAY FROM published_date) AS DAY FROM checkouts;
Wyniki będą wyglądać następująco:
author_name | book_title | year | month | day -------------+------------+------+-------+----- James Joyce | Ulysses | 1922 | 2 | 2(1 row)
Jest to przydatna funkcja, o której należy pamiętać, kiedy możesz potrzebować tylko części wartości daty do obliczeń na przykład z danymi.
Wniosek
W tym przewodniku omówiliśmy podstawy tego, co można zrobić za pomocą DATE
typ danych w PostgreSQL. Ważne jest, aby wiedzieć, jak dane dat działają w Twojej bazie danych. Znajomość sposobów uzyskiwania do niego dostępu i operowania na nim umożliwia wykonywanie obliczeń wieku, wykonywanie ekstrakcji w zapytaniach, a także konfigurowanie danych wyjściowych, jeśli to konieczne, aby dopasować je do wymagań innego systemu.