PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да получите деня на годината от дата в PostgreSQL

Проблем:

Искате да получите деня от годината от колона с дата или време в PostgreSQL.

Пример:

Нашата база данни има таблица с име software_sale с данни в колоните id , software и sale_date .

id софтуер дата_на_продажба
1 Супер игра X 15.09.2019
2 Браузър X 15.10.2019
3 Новини от DB 26.11.2019
4 MyPaintSoft 15.10.2018
5 Нова ОС 15.10.2019

Нека преброим броя на продадените софтуерни елементи по дни от годината. Ще използваме това, за да разберем в кои дни от годината (независимо от действителната година) продажбите са високи или ниски.

Решение 1:

Ще използваме DATE_PART() функция. Ето заявката, която бихте написали:

SELECT DATE_PART('doy',sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Ето резултата от заявката:

day_of_year брой
258 1
288 3
330 1

Дискусия:

Използвайте PostgreSQL DATE_PART() функция за извличане на номера на деня от годината от колона дата/час/дата и час. Тази функция приема два аргумента. Първият аргумент е частта за дата (или част от времето), която искате функцията да върне. В този пример използваме „doy “, което връща деня от годината. Можете да използвате други части, като ден, година, месец, час, минута, седмица и т.н. Можете да научите повече в документацията на PostgreSQL.

Вторият аргумент е датата/часът/датата и часът, от който искате да извлечете частта за дата/час. Това може да бъде израз, връщащ стойност за дата/час/датта и времеви клеймо или името на колона дата/час/дата и час. (В нашия пример това е колона с дата тип данни.)

Функцията DATE_PART() с „doy ’ идентификаторът връща номера на деня от годината (от 1 до 365/366) като цяло число. В нашия пример денят от годината на датата на продажба (от sale_date колона) вече се показва в нова колона, day_of_year . 15 октомври беше 288-ият ден през 2019 г. и през 2018 г.; на този ден за две години са извършени общо три продажби (2 през 2019 г., 1 през 2018 г.).

Използваме COUNT() агрегатна функция за отчитане на броя на продажбите. Тази функция приема един аргумент; в този случай това е идентификационният номер на софтуера. Нуждаем се и от GROUP BY клауза в тази заявка за групиране на записи според деня от годината. (В нашия пример действителният аргумент е day_of_year , псевдонимът за DATE_PART('doy',sale_date) .)

Това не е единственият начин да получите деня от годината. Можем също да използваме EXTRACT() функция.

Решение 2:

Ето заявката, която бихте написали с EXTRACT() функция:

SELECT EXTRACT('doy' FROM sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Тази функция е подобна на DATE_PART() . Разликата е, че използваме FROM вместо запетая между идентификатора на частта за дата и аргумента за дата и час. Резултатът е същият. Забележка:EXTRACT() е 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. Проста настройка за репликация на Slony-I.

  2. Как CONCAT_WS() работи в PostgreSQL

  3. Как да групирате времеви печати в острови (въз основа на произволна празнина)?

  4. Каква е разликата между pg_table_size, pg_relation_size и pg_total_relation_size? (PostgreSQL)

  5. алтернатива на mysql_insert_id за postgresql