Los métodos de formato 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. En adelante, a veces también necesitamos convertir zonas horarias. El momento siempre se registra en UTC en marcas de tiempo PostgreSQL para el formulario de datos de la 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 confiado 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 piezas de una marca de tiempo como desee. Una marca de tiempo, una doble precisión, 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 argumento único, 'to_timestamp', que toma un argumento de doble precisión y se transforma de una época de unix a la marca de tiempo usando la zona horaria. Te mostraremos cómo hacer algo al respecto en esta publicación. Primero echemos un vistazo más de cerca a_char ().
Sintaxis:
La función general de sintaxis para_char () es la siguiente:
>> to_char (expresión, formato);El método to_char () en PostgreSQL necesita dos afirmaciones:
Hay dos tipos de marca de tiempo disponibles en PostgreSQL:
Y aquí está el problema: el formulario de datos estándar de la marca de tiempo es ignorante de las zonas horarias. Y es una necesidad SQL (cómo podría haber ocurrido parece más allá). Nuestro enfoque principal es aprender a_char () marca de tiempo con una zona horaria. Para comenzar a trabajar en la función PostgreSQL con la función 'to_char ()', abra el shell de línea de comandos PostgreSQL y entregue los valores de parámetros para el servidor obligatorio, la base de datos, el número de puerto, el nombre de usuario y la contraseña. Deje estas consideraciones sin llenar si necesita consumir los parámetros designados predeterminados como se muestra en la imagen a continuación.
To_char () para el 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 los números de cadena. Entonces tenemos un número '1897', y lo convertiremos en el '9999.Formato de 99 'usando la consulta a continuación. De la salida a continuación, puede ver que el número de cadena se ha convertido en el formato especificado.
>> Seleccione 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 'coma'. El personaje 'G' se usará para especificar una coma.
>> seleccionar a_char (367.78, '9G999.99 ');Timestamp de to_char con zona horaria
Para comprender la marca de tiempo con el concepto de zona horaria, consideremos un ejemplo simple. Supongamos que está en 'Pakistán', por lo que su zona horaria debe ser 'PKT' ahora mismo.
Ejemplo 01:
Intentemos obtener la marca de tiempo actual en la consulta de selección mientras la convierte hasta el formato de hora en la fecha, como se muestra en la consulta a continuación. El término 'tz' se usa para devolver la zona horaria actual. La salida muestra el día, la fecha, la hora y la zona horaria.
>> seleccione a_char (current_timestamp, 'Day Mon Dd, aaa yyy hh12: mi am (tz)');Cambiemos nuestra zona horaria a 'Europa/Roma'.
>> set TimeZone = 'Europa/Roma';Obtendrá una hora, fecha y zona horaria de diferentes horas al probar la misma consulta seleccionada, como se muestra.
Ejemplo 02:
Cuando especifica la zona horaria en la consulta de selección, la salida no mostrará la zona horaria actual según la salida a continuación.
>> seleccione a_char (current_timestamp en la zona horaria 'Asia/Jerusalén', 'aaa yyy hh12: mi am (tz)');Ejemplo 03:
Creemos una mesa rápida llamada 'Tiempo' con dos campos. Uno es de tipo de marca de tiempo, y el otro es el tipo de timestampptz.
>> Crear tiempo de tabla (sin_Timezone Timestamp, with_timzaone timestampptz);Ahora revisemos la zona horaria actual que hemos estado usando en nuestro sistema utilizando 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 utilizando en su dispositivo en la tabla 'hora' utilizando la función 'Now ()' como se muestra a continuación.
>> insertar en valores de tiempo (ahora (), ahora ());Ahora puede obtener el registro de la tabla 'Tiempo' utilizando la consulta Seleccionar a continuación. La columna 'Sin_TimáZone' muestra la fecha y hora actuales sin una zona horaria, mientras que la columna 'With_Timezone' muestra la hora local con la zona horaria por completo.
>> seleccionar * desde el tiempo;Cambiemos la zona horaria a 'EE. UU./Este' de la consulta a continuación.
>> Establecer la zona horaria de la sesión 'US/Eastern';Ahora revisemos la mesa nuevamente. Verá cómo se ha mostrado el valor de la columna 'With_TimáZone' de acuerdo con la zona horaria 'EE. UU./Eastern', pero el valor de 'sin_TimeZone' es el mismo que antes.
>> seleccionar * desde el tiempo;Ejemplo 04:
Tengamos algunos ejemplos más para el método to_char (). Suponga la misma tabla anterior 'tiempo'. Convertiremos el valor de columna 'sin_Timezone' en una cadena que se compone de horas, minutos, segundos y zona horaria. Probemos la consulta de selección usando el método to_char () para convertir el valor de la columna 'sin_Timezone'. Hemos mencionado 'TZ' en nuestra consulta, pero no mostrará la zona horaria porque el valor de la columna no consiste en la zona horaria. El comando declarado-below da la salida:
>> Seleccione To_Char (sin_TimeZone, 'HH12: MI: SS TZ') desde el tiempo;Ahora intentemos la misma consulta en el caso de la otra columna 'with_timezone', para convertirla en la cadena de horas, minutos, segundos y horarios. Esta vez mostrará la zona horaria con el tiempo también usando la consulta a continuación.
>> seleccione To_Char (with_TimeZone, 'HH12: MI: SS TZ') desde el tiempo;Conclusión:
Dado que el problema con/sin zona horaria afecta más que la partición de la tabla, le recomiendo que use el tipo de zona horaria siempre que sea posible. Casi todas las pautas discutieron cómo realizar purgas dependientes del tiempo en PostgreSQL utilizando horas locales. Una solución adecuada y sensible a la zona horaria agrega pocas complicaciones pero podría salvarlo de los problemas en el futuro.