sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo funciona to_date() en PostgreSQL

En PostgreSQL, puede usar to_date() función para convertir una cadena en una fecha.

Sintaxis

La sintaxis es así:

to_date(text, text)

Donde el primer argumento es una representación de cadena de la fecha, y el segundo argumento define la plantilla que usa el primer argumento.

Ejemplo

Aquí hay un ejemplo básico para demostrarlo.

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

Resultado:

2010-02-10

Plantillas

El segundo argumento proporciona la plantilla en la que se proporciona el primer argumento. Esto a veces se denomina "cadena de formato".

La plantilla consta de uno o más patrones de plantilla y, opcionalmente, uno o más modificadores de patrón de plantilla.

Patrones de plantilla

Usando el ejemplo anterior, DD es un patrón de plantilla y Mon es un patrón de plantilla. YYYY es también un patrón de plantilla. Todo esto se combinó para formar la plantilla.

Puede mover cada patrón de plantilla según sea necesario. Y puedes usar diferentes patrones de plantilla en conjunto.

Aquí hay algunos ejemplos más que usan la misma fecha, pero en diferentes formatos (y por lo tanto, usando diferentes plantillas).

\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";

Resultado (usando salida vertical):

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

Entonces, todos usan la misma fecha, pero la fecha se proporciona en diferentes formatos. El trabajo de la plantilla es especificar explícitamente a Postgres en qué formato se proporcionó la fecha.

Como probablemente pueda imaginar, si no proporcionamos la plantilla, algunas fechas podrían interpretarse de manera incorrecta, especialmente si la fecha usa una configuración regional diferente para su formato.

Por ejemplo, 03/01/2010 podría interpretarse como el primero de marzo o el tres de enero, según el lugar.

Modificadores de patrón de plantilla

En ocasiones, es posible que también deba agregar un modificador de patrón de plantilla a la plantilla.

Por ejemplo, si su fecha usa un sufijo de número ordinal, deberá asegurarse de que se interprete como tal.

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";

Resultado (usando salida vertical):

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

Si no hubiera usado el modificador de patrón de plantilla, habría recibido un error al usar esas fechas.

Aquí hay un ejemplo para ilustrar.

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

Resultado:

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

Lista completa de patrones y modificadores de plantilla

Postgres incluye muchos más patrones y modificadores de plantillas.

Estos también se pueden usar al formatear valores de fecha/hora (por ejemplo, cuando se usa to_char() para convertir una marca de tiempo en una cadena).

Consulte Patrones y modificadores de plantilla para formato de fecha/hora en PostgreSQL para obtener una lista completa.