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

Cómo funciona to_timestamp() en PostgreSQL

Según la documentación de PostgreSQL, hay dos funciones llamadas to_timestamp() :

  • Uno convierte la época de Unix en una marca de tiempo. La época de Unix es el número de segundos desde 1970-01-01 00:00:00+00.
  • El otro convierte una cadena en una marca de tiempo.

Más específicamente, cada función convierte el valor en una marca de tiempo con zona horaria valor.

Aunque la documentación de Postgres los presenta como dos to_timestamp() separados funciones, las presento como si fueran una función que acepta un argumento o dos.

Sintaxis

Puede usar to_timestamp() de las siguientes maneras:

to_timestamp(double precision)
to_timestamp(text, text)

Usando la primera sintaxis, el argumento se proporciona como una doble precisión valor, y es el valor de Época, en doble precisión que desea convertir a una marca de tiempo.

Usando la segunda sintaxis, el primer argumento es la fecha y el segundo argumento es la cadena de formato.

Convertir la época de Unix

Aquí hay un ejemplo básico para demostrar cómo convertir la Época en una marca de tiempo.

SELECT to_timestamp(1658792421);

Resultado:

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

En mi caso, el desplazamiento de la zona horaria es +10 y eso es lo que se devuelve.

Segundos fraccionarios

Aquí hay un ejemplo con fracciones de segundo.

SELECT to_timestamp(1658792421.123456);

Resultado:

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

Formateo

Este es un ejemplo del uso de la segunda sintaxis para dar formato a un valor de fecha.

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

Resultado:

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

El segundo argumento se proporciona para indicar cómo se formatea el primer argumento.

Aquí hay otro formato para ilustrar mejor este punto.

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

Resultado:

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

Si el formato del segundo argumento no coincide con el formato del primer argumento, puede terminar con un error.

Por ejemplo:

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

Resultado:

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

La cadena de formato (segundo argumento) puede ser cualquier patrón de plantilla con un modificador opcional.

Aquí hay una lista completa de patrones de plantilla y modificadores que puede usar con esta función.

El tipo de retorno

Como se mencionó, el tipo de devolución es marca de tiempo con zona horaria . Podemos verificar esto con pg_typeof() función.

SELECT pg_typeof(to_timestamp(1658792421.123456));

Resultado:

timestamp with time zone

Extracción de partes de fechas

Puede usar varios métodos para extraer partes de la fecha del valor de la marca de tiempo.

Por ejemplo, puede usar extract() función.

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

Resultado:

7

Y puedes usar to_char() función si necesita hacer algo como mostrar el nombre del mes en lugar del número del mes.

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

Resultado:

July

Y aquí está usando la sintaxis de formato.

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

Resultado:

October

Si solo tiene el número del mes, puede usar el siguiente ejemplo para convertir el número del mes en el nombre del mes.

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

Resultado:

March

Y viceversa (convierta el nombre del mes en el número del mes).

En el siguiente ejemplo, extraigo el número del mes usando date_part() como alternativa a extract() .

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

Resultado:

3