sql >> Database >  >> RDS >> PostgreSQL

Hoe to_timestamp() werkt in PostgreSQL

Volgens de PostgreSQL-documentatie zijn er twee functies genaamd to_timestamp() :

  • Men converteert het Unix-tijdperk naar een tijdstempel. Het Unix-tijdperk is het aantal seconden sinds 1970-01-01 00:00:00+00.
  • De andere converteert een string naar een tijdstempel.

Meer specifiek converteert elke functie de waarde naar een tijdstempel met tijdzone waarde.

Hoewel de Postgres-documentatie ze presenteert als twee afzonderlijke to_timestamp() functies, presenteer ik ze alsof ze één functie zijn die één argument of twee accepteert.

Syntaxis

U kunt to_timestamp() . gebruiken op de volgende manieren:

to_timestamp(double precision)
to_timestamp(text, text)

Met behulp van de eerste syntaxis wordt het argument geleverd als een dubbele precisie waarde, en het is de Epoch-waarde, met dubbele precisie die u wilt converteren naar een tijdstempel.

Bij gebruik van de tweede syntaxis is het eerste argument de datum en het tweede argument de opmaakreeks.

Converteer het Unix-tijdperk

Hier is een eenvoudig voorbeeld om te demonstreren hoe u de Epoch kunt converteren naar een tijdstempel.

SELECT to_timestamp(1658792421);

Resultaat:

2022-07-26 09:40:21+10

In mijn geval is de tijdzone-offset +10 en dat is dus wat wordt geretourneerd.

Fractionele seconden

Hier is een voorbeeld met fractionele seconden.

SELECT to_timestamp(1658792421.123456);

Resultaat:

2022-07-26 09:40:21.123456+10

Opmaak

Hier is een voorbeeld van het gebruik van de tweede syntaxis om een ​​datumwaarde op te maken.

SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');

Resultaat:

2022-10-21 00:00:00+10

Het tweede argument wordt gegeven om aan te geven hoe het eerste argument is opgemaakt.

Hier is een ander formaat om dit punt verder te illustreren.

SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');

Resultaat:

2022-10-21 00:00:00+10

Als het formaat van het tweede argument niet overeenkomt met het formaat van het eerste argument, kan er een fout optreden.

Bijvoorbeeld:

SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');

Resultaat:

ERROR: invalid value "ober" for "YYYY"
DETAIL: Value must be an integer.

De format string (tweede argument) kan elk sjabloonpatroon zijn met een optionele modifier.

Hier is een volledige lijst met sjabloonpatronen en modifiers die u met deze functie kunt gebruiken.

Het retourtype

Zoals vermeld, is het retourtype tijdstempel met tijdzone . We kunnen dit verifiëren met de pg_typeof() functie.

SELECT pg_typeof(to_timestamp(1658792421.123456));

Resultaat:

timestamp with time zone

Datumdelen extraheren

U kunt verschillende methoden gebruiken om datumdelen uit de tijdstempelwaarde te extraheren.

U kunt bijvoorbeeld de extract() . gebruiken functie.

SELECT extract('month' from to_timestamp(1658792421));

Resultaat:

7

En je kunt de to_char() . gebruiken functie als u iets moet doen zoals de naam van de maand weergeven in plaats van het maandnummer.

SELECT to_char(to_timestamp(1658792421), 'Month');

Resultaat:

July

En hier gebruikt het de opmaaksyntaxis.

SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');

Resultaat:

October

Als je alleen het maandnummer hebt, kun je het volgende voorbeeld gebruiken om het maandnummer om te zetten in de maandnaam.

SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');

Resultaat:

March

En vice versa (maandnaam omzetten in maandnummer).

In het volgende voorbeeld extraheer ik het maandnummer met behulp van date_part() als alternatief voor extract() .

SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));

Resultaat:

3

  1. De beste manier om geneste case-statementlogica in SQL Server uit te voeren

  2. Django + Python 3 + PostgreSQL implementeren op AWS Elastic Beanstalk

  3. Oracle-tabelveranderingsmonitor

  4. Oracle ORA-01008:niet alle variabelen gebonden Fout met parameters