sql >> Database >  >> RDS >> PostgreSQL

Hoe to_date() werkt in PostgreSQL

In PostgreSQL kunt u de to_date() . gebruiken functie om een ​​string naar een datum te converteren.

Syntaxis

De syntaxis gaat als volgt:

to_date(text, text)

Waar het eerste argument een tekenreeksrepresentatie van de datum is, en het tweede argument de sjabloon definieert die het eerste argument gebruikt.

Voorbeeld

Hier is een eenvoudig voorbeeld om te demonstreren.

SELECT to_date('10th Feb 2010', 'DD Mon YYYY');

Resultaat:

2010-02-10

Sjablonen

Het tweede argument levert de sjabloon waarin het eerste argument wordt gegeven. Dit wordt soms een "format string" genoemd.

De sjabloon bestaat uit een of meer sjabloonpatronen en optioneel een of meer sjabloonpatroonaanpassers.

Sjabloonpatronen

Gebruikmakend van het vorige voorbeeld, DD is een sjabloonpatroon en Mon is een sjabloonpatroon. YYYY is ook een sjabloonpatroon. Deze werden allemaal gecombineerd om de sjabloon te vormen.

U kunt elk sjabloonpatroon naar wens verplaatsen. En u kunt verschillende sjabloonpatronen gebruiken.

Hier zijn nog enkele voorbeelden die dezelfde datum gebruiken, maar in verschillende formaten (en dus met verschillende sjablonen).

\x
SELECT 
  to_date('10 Feb 2010', 'DD Mon YYYY') AS "DD Mon YYYY",
  to_date('Feb 10 2010', 'Mon DD YYYY') AS "Mon DD YYYY",
  to_date('10/02/2010', 'DD/MM/YYYY') AS "DD/MM/YYYY",
  to_date('02/10/2010', 'MM/DD/YYYY') AS "MM/DD/YYYY",
  to_date('02-10-2010', 'MM-DD-YYYY') AS "MM-DD-YYYY",  
  to_date('02102010', 'MMDDYYYY') AS "MMDDYYYY",
  to_date('02-10-10', 'MM-DD-YY') AS "MM-DD-YY";

Resultaat (met verticale uitvoer):

DD Mon YYYY | 2010-02-10
Mon DD YYYY | 2010-02-10
DD/MM/YYYY  | 2010-02-10
MM/DD/YYYY  | 2010-02-10
MM-DD-YYYY  | 2010-02-10
MMDDYYYY    | 2010-02-10
MM-DD-YY    | 2010-02-10

Ze gebruiken dus allemaal dezelfde datum, maar de datum wordt in verschillende formaten weergegeven. Het is de taak van de sjabloon om expliciet aan Postgres te specificeren in welk formaat de datum is opgegeven.

Zoals je je waarschijnlijk kunt voorstellen, zouden sommige datums op de verkeerde manier kunnen worden geïnterpreteerd als we de sjabloon niet hadden verstrekt, vooral als de datum een ​​andere landinstelling gebruikt voor zijn formaat.

01/03/2010 kan bijvoorbeeld worden geïnterpreteerd als 1 maart of 3 januari, afhankelijk van de landinstelling.

Sjabloonpatroonmodificaties

Soms moet je misschien ook een sjabloonpatroonaanpasser aan de sjabloon toevoegen.

Als uw datum bijvoorbeeld een volgnummer achtervoegsel gebruikt, moet u ervoor zorgen dat dit als zodanig wordt geïnterpreteerd.

SELECT 
  to_date('10th Feb 2010', 'DDth Mon YYYY') AS "10th Feb 2010",
  to_date('01st Feb 2010', 'DDth Mon YYYY') AS "01st Feb 2010",
  to_date('03rd Feb 2010', 'DDth Mon YYYY') AS "03rd Feb 2010";

Resultaat (met verticale uitvoer):

10th Feb 2010 | 2010-02-10
01st Feb 2010 | 2010-02-01
03rd Feb 2010 | 2010-02-03

Als ik de sjabloonpatroonmodifier niet had gebruikt, zou ik een foutmelding hebben gekregen bij het gebruik van die datums.

Hier is een voorbeeld om te illustreren.

SELECT to_date('10th Feb 2010', 'DD Mon YYYY');

Resultaat:

ERROR: invalid value "th" for "Mon"
DETAIL: The given value did not match any of the allowed values for this field.

Volledige lijst met sjabloonpatronen en -modificaties

Postgres bevat nog veel meer sjabloonpatronen en modifiers.

Deze kunnen ook worden gebruikt bij het formatteren van datum-/tijdwaarden (bijvoorbeeld bij gebruik van de to_char() functie om een ​​tijdstempel naar een tekenreeks te converteren).

Zie Sjabloonpatronen en -modificaties voor datum-/tijdopmaak in PostgreSQL voor een volledige lijst.


  1. PDO::fetchAll vs. PDO::fetch in a loop

  2. Mijn MySQL-database heeft onvoldoende schijfruimte

  3. Aangepaste snelkoppelingen maken in SQL Server Management Studio (SSMS) - SQL Server / TSQL-zelfstudie, deel 10

  4. SQL SERVER – SQL_NO_CACHE en OPTIE (RECOMPILE)