Problem:
Chcesz pobrać dzień roku z kolumny daty lub znacznika czasu w PostgreSQL.
Przykład:
Nasza baza danych zawiera tabelę o nazwie software_sale
z danymi w kolumnach id
, software
i sale_date
.
id | oprogramowanie | data_sprzedaży |
---|---|---|
1 | Super gra X | 2019-09-15 |
2 | Przeglądarka X | 2019-10-15 |
3 | Wiadomości DB | 26-11-2019 |
4 | MyPaintSoft | 2018-10-15 |
5 | Nowy system operacyjny | 2019-10-15 |
Policzmy liczbę sprzedanych elementów oprogramowania według dni w roku. Wykorzystamy to, aby dowiedzieć się, w które dni roku (niezależnie od rzeczywistego roku) sprzedaż była wysoka lub niska.
Rozwiązanie 1:
Użyjemy DATE_PART()
funkcjonować. Oto zapytanie, które możesz napisać:
SELECT DATE_PART('doy',sale_date) AS day_of_year, COUNT(id) as count FROM software_sale GROUP BY day_of_year;
Oto wynik zapytania:
dzień_roku | liczba |
---|---|
258 | 1 |
288 | 3 |
330 | 1 |
Dyskusja:
Użyj DATE_PART()
PostgreSQL funkcja do pobierania numeru dnia w roku z kolumny data/godzina/data/godzina/znacznik czasu. Ta funkcja przyjmuje dwa argumenty. Pierwszym argumentem jest część daty (lub część czasu), którą funkcja ma zwrócić. W tym przykładzie używamy „doy
’, który zwraca dzień roku. Możesz użyć innych części, takich jak dzień, rok, miesiąc, godzina, minuta, tydzień itp. Więcej informacji znajdziesz w dokumentacji PostgreSQL.
Drugi argument to data/godzina/data/godzina/sygnatura czasowa, z której chcesz wyodrębnić część dotyczącą daty/godziny. Może to być wyrażenie zwracające wartość daty/godziny/daty/godziny/znacznika czasu lub nazwę kolumny data/godzina/data/godzina/znacznik czasu. (W naszym przykładzie jest to kolumna z datą typ danych.)
Funkcja DATE_PART()
z „doy
Identyfikator ’ zwraca numer dnia w roku (od 1 do 365/366) jako liczbę całkowitą. W naszym przykładzie dzień w roku daty sprzedaży (z sale_date
kolumna) jest teraz wyświetlana w nowej kolumnie, day_of_year
. 15 października był 288 dniem w 2019 i 2018 roku; w tym dniu w ciągu dwóch lat zrealizowano łącznie trzy sprzedaże (2 w 2019 roku, 1 w 2018 roku).
Używamy COUNT()
funkcja agregująca do zliczania sprzedaży. Ta funkcja przyjmuje jeden argument; w tym przypadku jest to numer identyfikacyjny oprogramowania. Potrzebujemy również GROUP BY
klauzula w tym zapytaniu, aby pogrupować rekordy według dnia roku. (W naszym przykładzie rzeczywistym argumentem jest day_of_year
, alias dla DATE_PART('doy',sale_date)
.)
To nie jedyny sposób na uzyskanie dnia w roku. Możemy również użyć EXTRACT()
funkcja.
Rozwiązanie 2:
Oto zapytanie, które napisałbyś za pomocą EXTRACT()
funkcja:
SELECT EXTRACT('doy' FROM sale_date) AS day_of_year, COUNT(id) as count FROM software_sale GROUP BY day_of_year;
Ta funkcja jest podobna do DATE_PART()
. Różnica polega na tym, że używamy FROM zamiast przecinka między identyfikatorem części daty a argumentem daty i godziny. Wynik jest taki sam. Uwaga:EXTRACT()
jest standardem SQL.