PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak uzyskać dzień roku z daty w PostgreSQL?

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problemy z ustawieniem własnego klucza podstawowego w migracji Rails 4

  2. Zapisz dane wyjściowe PL/pgSQL z PostgreSQL do pliku CSV

  3. Różnica między językiem sql a językiem plpgsql w funkcjach PostgreSQL

  4. Wybierz typ danych pola w postgresie

  5. Jak znaleźć tabelę z określoną kolumną w postgresql