PostgreSQL DATE_TRUNC()-Funktion

Shihab Sikder 20 Juni 2023
  1. die Verwendung der Funktion DATE_TRUNC() in PostgreSQL
  2. "Millisekunde" Genauigkeit in Postgres DATE_TRUNC()
  3. "second" Genauigkeit in Postgres DATE_TRUNC()
  4. "minute" Genauigkeit in Postgres DATE_TRUNC()
  5. "Stunde" Genauigkeit in Postgres DATE_TRUNC()
  6. "day" Genauigkeit in Postgres DATE_TRUNC()
  7. Verwenden Sie DATE_TRUNC() mit Abfrage in Postgres
PostgreSQL DATE_TRUNC()-Funktion

In diesem Artikel wird die Funktion DATE_TRUNC() von Postgres mit Codeschnipseln besprochen.

die Verwendung der Funktion DATE_TRUNC() in PostgreSQL

In Postgres ist es möglich, einen bestimmten Zeitstempel auf eine bestimmte Genauigkeitsstufe zu kürzen oder zu runden. Angenommen, Sie können es auf die nächste Minute, Stunde, Tag, Monat usw. kürzen.

In Postgres hat DATE_TRUNC() die folgenden Intervalle.

Century
Day
Decade
Hour
Minute
Microsecond
Millisecond
Second
Month
Quarter
Week
Year

Hier ist der aktuelle Zeitstempel. Wir verwenden es für verschiedene Intervalle, um das Ergebnis zu sehen.

postgres=# SELECT NOW();
              now
-------------------------------
 2022-04-29 17:30:48.256668+06
(1 row)

"Millisekunde" Genauigkeit in Postgres DATE_TRUNC()

Wir werden “Millisekunde” als Genauigkeit in DATE_TRUNC() verwenden.

postgres=# SELECT DATE_TRUNC('millisecond', TIMESTAMP '2022-04-29 17:30:48.256668');
       date_trunc
-------------------------
 2022-04-29 17:30:48.256
(1 row)

Die Millisekunde war 256668. Dann wurde es auf 256 gekürzt.

"second" Genauigkeit in Postgres DATE_TRUNC()

Hier verwenden wir "Sekunde" als Präzision im DATE_TRUNC().

postgres=# SELECT DATE_TRUNC('second', TIMESTAMP '2022-04-29 17:30:48.256668');
     date_trunc
---------------------
 2022-04-29 17:30:48
(1 row)

Sie können sehen, dass der Dezimalteil gekürzt wird, um den Wert aufzurunden.

"minute" Genauigkeit in Postgres DATE_TRUNC()

Wir haben die “Minute” als Präzision im DATE_TRUNC() verwendet.

postgres=# SELECT DATE_TRUNC('minute', TIMESTAMP '2022-04-29 17:30:48.256668');
     date_trunc
---------------------
 2022-04-29 17:30:00
(1 row)

Die Minute war 30:48. Mit DATE_TRUNC(), wurde daraus 30:00.

"Stunde" Genauigkeit in Postgres DATE_TRUNC()

Lassen Sie uns "Stunde" als Genauigkeit in DATE_TRUNC() verwenden.

postgres=# SELECT DATE_TRUNC('hour', TIMESTAMP '2022-04-29 17:30:48.256668');
     date_trunc
---------------------
 2022-04-29 17:00:00
(1 row)

Sie sehen den Unterschied zwischen 17:30:48.256668 und 17:00:00.

"day" Genauigkeit in Postgres DATE_TRUNC()

Verwenden Sie den Tag als Präzision im DATE_TRUNC().

postgres=# SELECT DATE_TRUNC('day', TIMESTAMP '2022-04-29 17:30:48.256668');
     date_trunc
---------------------
 2022-04-29 00:00:00
(1 row)

Sie können sehen, dass die Uhrzeit 00:00:00 wurde. Es rundete den Tag ab.

Verwenden Sie DATE_TRUNC() mit Abfrage in Postgres

Lassen Sie uns die folgenden MOCK_DATA beim Hotel-Check-in haben.

postgres=# SELECT * from MOCK_DATA;
 id  | first_name  |  last_name   |              email               |   gender    |  check_in
-----+-------------+--------------+----------------------------------+-------------+------------
   1 | Agustin     | Bawdon       | abawdon0@umn.edu                 | Male        | 2016-05-11
   2 | Maximilian  | Ber          | mber1@artisteer.com              | Male        | 2013-03-08
   3 | Randy       | Kline        | rkline2@pcworld.com              | Bigender    | 2019-01-01
   4 | Bonnibelle  | Mazillius    | bmazillius3@is.gd                | Female      | 2011-07-06
   5 | Rolland     | Hollidge     | rhollidge4@seesaa.net            | Male        | 2009-04-30
   6 | Sandro      | Hubbert      | shubbert5@nature.com             | Male        | 2019-11-26
   7 | Collin      | La Torre     | clatorre6@google.de              | Male        | 2016-02-12
   8 | Joleen      | Jerram       | jjerram7@instagram.com           | Female      | 2015-05-23
-- More  --

Wir wollen jedes Jahr die Check-Ins zählen.

SELECT
    date_trunc('year', check_in) year_no,
    COUNT(id) Customers
FROM
    MOCK_DATA
GROUP BY
    year_no
ORDER BY
    year_no;

Ausgang:

        year_no         | customers
------------------------+-----------
 2008-01-01 00:00:00+06 |        17
 2009-01-01 00:00:00+06 |        20
 2010-01-01 00:00:00+06 |        15
 2011-01-01 00:00:00+06 |        20
 2012-01-01 00:00:00+06 |        19
 2013-01-01 00:00:00+06 |        18
 2014-01-01 00:00:00+06 |        13
 2015-01-01 00:00:00+06 |        24
 2016-01-01 00:00:00+06 |        18
 2017-01-01 00:00:00+06 |        13
 2018-01-01 00:00:00+06 |        23
 2019-01-01 00:00:00+06 |        17
 2020-01-01 00:00:00+06 |        16
 2021-01-01 00:00:00+06 |        12
 2022-01-01 00:00:00+06 |         5
(15 rows)

Um mehr über DATE_TRUNC() zu erfahren, hier ist die offizielle Dokumentation. Sie können mockaroo verwenden, um die Beispieldatenbank zu generieren.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

Verwandter Artikel - PostgreSQL Function