sql >> Database teknologi >  >> RDS >> PostgreSQL

Tidligste tidsstempel understøttet i PostgreSQL

Manualen angiver værdierne som:

  • Lav værdi:4713 f.Kr.
  • Høj værdi:294276 AD

med forbeholdet, som Chris bemærkede, at -infinity er også understøttet.

Se noten senere på samme side i manualen; ovenstående er kun sandt, hvis du bruger heltal tidsstempler , som er standard i alle vagt nyere versioner af PostgreSQL. Hvis du er i tvivl:

SHOW integer_datetimes;

vil fortælle dig. Hvis du i stedet bruger floating point datetimes, får du større rækkevidde og mindre (ikke-lineær) præcision. Ethvert forsøg på at regne minimumsprogrammet ud skal klare den begrænsning.

PostgreSQL lader dig ikke bare kaste nul til et tidsstempel for at få det mindst mulige tidsstempel, og det ville heller ikke give meget mening, hvis du brugte flydende komma-datotider. Du kan brug den julianske datokonverteringsfunktion, men dette giver dig epoken ikke minimumstiden :

postgres=> select to_timestamp(0);
      to_timestamp      
------------------------
 1970-01-01 08:00:00+08
(1 row)

fordi den accepterer negative værdier. Man skulle tro, at det ville virke at give det negativ maxint, men resultaterne er overraskende til det punkt, hvor jeg spekulerer på, om vi har en omsluttende fejl på lur her:

postgres=> select to_timestamp(-922337203685477);
          to_timestamp           
---------------------------------
 294247-01-10 12:00:54.775808+08
(1 row)

postgres=> select to_timestamp(-92233720368547);
          to_timestamp           
---------------------------------
 294247-01-10 12:00:54.775808+08
(1 row)

postgres=> select to_timestamp(-9223372036854);
         to_timestamp         
------------------------------
 294247-01-10 12:00:55.552+08
(1 row)

postgres=> select to_timestamp(-922337203685);
ERROR:  timestamp out of range
postgres=> select to_timestamp(-92233720368);
          to_timestamp           
---------------------------------
 0954-03-26 09:50:36+07:43:24 BC
(1 row)

postgres=> select to_timestamp(-9223372036);
         to_timestamp         
------------------------------
 1677-09-21 07:56:08+07:43:24
(1 row)

(Måske relateret til det faktum, at to_timestamp tager en fordobling, selvom tidsstempler er gemt som heltal i disse dage?).

Jeg tænker, at det muligvis er klogest bare at lade tidsstemplets rækkevidde være et hvilket som helst tidsstempel, man ikke får en fejl på. Udvalget af gyldige tidsstempler er trods alt ikke kontinuerligt:

postgres=> SELECT TIMESTAMP '2000-02-29';
      timestamp      
---------------------
 2000-02-29 00:00:00
(1 row)

postgres=> SELECT TIMESTAMP '2001-02-29';
ERROR:  date/time field value out of range: "2001-02-29"
LINE 1: SELECT TIMESTAMP '2001-02-29';

så du kan ikke antage, at bare fordi en værdi er mellem to gyldige tidsstempler, er den selvgyldig.



  1. Kan jeg give adgang til databaser med præfiks og derefter wild card?

  2. Ufølsom søgning i Oracle

  3. MySql FLOAT datatype og problemer med mere end 7-cifret skala

  4. Skinner validerer unikke fejl på samtidige input