PostgreSQL

Marca de tiempo de PostgreSQL To_char con zona horaria

Marca de tiempo de PostgreSQL To_char con zona horaria

Los métodos de formateo de PostgreSQL incluyen una colección útil de herramientas para traducir diferentes tipos de datos (fecha / hora, entero, punto flotante, numérico) a cadenas formateadas y traducir cadenas formateadas a tipos de datos únicos. De ahora en adelante, a veces también necesitamos convertir las zonas horarias. El tiempo siempre se registra en UTC en las marcas de tiempo de PostgreSQL para el formulario de datos de zona horaria, pero se muestra de forma predeterminada en el navegador, la sesión o la hora local del usuario. Una de sus funciones auxiliares en las que hemos llegado a confiar es el método TO_CHAR (), que permite marcas de tiempo y marcas de tiempo con zona horaria, entre otras formas, y le permite organizar las partes de una marca de tiempo como desee. Una marca de tiempo, una precisión doble, la duración, un número o un valor numérico se pueden convertir en una cadena utilizando el método PostgreSQL TO_CHAR (). Parece haber un método de un solo argumento, 'to_timestamp', que toma un argumento de doble precisión y se transforma de Unix epoch a timestamp usando la zona horaria. Te mostraremos cómo hacer algo al respecto en esta publicación. Echemos un vistazo más de cerca a to_char () primero.

Sintaxis:

La sintaxis general para la función to_char () es la siguiente:

>> To_char (expresión, formato);

El método TO_CHAR () en PostgreSQL necesita dos afirmaciones:

Hay dos tipos de marcas de tiempo disponibles en PostgreSQL:

Y aquí está el problema: el formulario de datos de marca de tiempo estándar ignora las zonas horarias. Y es una necesidad de SQL (cómo podría haber ocurrido parece más allá). Nuestro objetivo principal es aprender la marca de tiempo to_Char () con una zona horaria. Para comenzar a trabajar en PostgreSQL con la función 'to_char ()', abra el shell de línea de comandos de PostgreSQL y entregue los valores de los parámetros para el servidor obligatorio, base de datos, número de puerto, nombre de usuario y contraseña. Deje estas consideraciones sin completar si necesita consumir los parámetros designados predeterminados como se muestra en la siguiente imagen.

To_char () para número de cadena

Para comprender el concepto de la función to_Char () usando la marca de tiempo con la zona horaria, primero debe probar el ejemplo de números de cadena. Así que tenemos un número '1897' y lo convertiremos al '9999.99 'formato usando la siguiente consulta. En el resultado a continuación, puede ver que el número de cadena se ha convertido al formato especificado.

>> SELECCIONAR to_char (1897, '9999.99 ');

Aquí hay otra ilustración para la conversión. Esta vez hemos convertido un número en un formato diferente que tiene una "coma" en él. El carácter 'G' se utilizará para especificar una coma.

>> SELECCIONAR to_char (367.78, 9G999.99 ');

Marca de tiempo To_char con TimeZone

Para comprender el concepto de marca de tiempo con zona horaria, consideremos un ejemplo simple. Suponga que está en 'Pakistán', por lo que su zona horaria debe ser 'PKT' en este momento.

Ejemplo 01:

Intentemos obtener la marca de tiempo actual en la consulta SELECT mientras la convertimos al formato de fecha y hora, como se muestra en la consulta a continuación. El término 'TZ' se utiliza para devolver la zona horaria actual. La salida muestra el día, la fecha, la hora y la zona horaria.

>> SELECT to_char (CURRENT_TIMESTAMP, 'Día Lun dd, aaaa HH12: MI AM (TZ)');

Cambiemos nuestra zona horaria a 'Europa / Roma'.

>> SET TimeZone = 'Europa / Roma';

Obtendrá una hora, fecha y zona horaria diferentes al intentar la misma consulta SELECT, como se muestra.

Ejemplo 02:

Cuando especifica la zona horaria en la consulta SELECT, la salida no mostrará la zona horaria actual según la siguiente salida.

>> SELECT to_char (CURRENT_TIMESTAMP EN LA ZONA HORARIA 'Asia / Jerusalén', 'aaaa HH12: MI AM (TZ)');

Ejemplo 03:

Creemos una tabla rápida llamada 'tiempo' con dos campos. Uno es del tipo TIMESTAMP y el otro es del tipo TIMESTAMPTZ.

>> CREATE TABLE time (without_timezone TIMESTAMP, with_timezone TIMESTAMPTZ);

Ahora verifiquemos la zona horaria actual que hemos estado usando en nuestro sistema usando el comando SHOW en el shell de la siguiente manera:

>> MOSTRAR zona horaria;

Ahora debe insertar los valores actuales de la fecha y hora de la zona horaria actual que ha estado usando en su dispositivo en la tabla 'tiempo' usando la función 'ahora ()' como se muestra a continuación.

>> INSERTAR EN VALORES de tiempo (ahora (), ahora ());

Ahora puede obtener el registro de la tabla 'tiempo' usando la consulta SELECT como se muestra a continuación. La columna 'without_timezone' muestra la fecha y hora actuales sin una zona horaria, mientras que la columna 'with_timezone' muestra la hora local con la zona horaria completamente.

>> SELECCIONAR * DESDE el tiempo;

Cambiemos la zona horaria a 'US / EASTERN' de la siguiente consulta.

>> ESTABLECER LA ZONA HORARIA DE LA SESIÓN 'US / EASTERN';

Ahora revisemos la mesa de nuevo. Verá cómo se ha mostrado el valor de la columna 'with_timezone' según la zona horaria 'US / EASTERN', pero el valor de 'without_timezone' es el mismo que antes.

>> SELECCIONAR * DESDE el tiempo;

Ejemplo 04:

Tengamos algunos ejemplos más para el método to_char (). Suponga el mismo 'tiempo' de la tabla anterior. Convertiremos el valor de la columna 'without_timezone' en una cadena que se compone de horas, minutos, segundos y zona horaria. Probemos la consulta SELECT usando el método to_char () para convertir el valor de la columna 'without_timezone'. Hemos mencionado 'TZ' en nuestra consulta, pero no mostrará la zona horaria porque el valor de la columna no consta de la zona horaria. El comando indicado a continuación da el resultado:

>> SELECT to_char (sin_timezone, 'HH12: MI: SS TZ') FROM time;

Ahora intentemos la misma consulta en el caso de la otra columna 'with_timezone', para convertirla en la cadena de horas, minutos, segundos y zona horaria. Esta vez también mostrará la zona horaria con el tiempo utilizando la siguiente consulta.

>> SELECT to_char (with_timezone, 'HH12: MI: SS TZ') FROM time;

Conclusión:

Dado que el problema con / sin zona horaria afecta más que solo la partición de la tabla, le recomiendo que utilice el tipo de zona horaria siempre que sea posible. Casi todas las pautas discutieron cómo hacer una depuración dependiente del tiempo en PostgreSQL usando horas locales. Una solución adecuada y sensible a la zona horaria agrega pequeñas complicaciones, pero podría evitarle problemas en el futuro.

Los mejores juegos de línea de comandos para Linux
La línea de comandos no es solo su mayor aliado cuando usa Linux, también puede ser la fuente de entretenimiento porque puede usarla para jugar muchos...
Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....
Herramientas útiles para jugadores de Linux
Si le gusta jugar juegos en Linux, es probable que haya utilizado aplicaciones y utilidades como Wine, Lutris y OBS Studio para mejorar la experiencia...