>
 

Inicio

Novedades de pgsql en la 7.0

Entrevista con Bruce Momjian

Manejo de Estilos de Fechas en PostgreSQL

Introducción a los Triggers en C para PostgreSQL

Ligas interesantes

Formato de salida de fechas y horas

La manera en que Postgres forma la salida de las fechas se puede modificar por medio se la sentencia SET DateStyle TO 'estilo_deseado';

En donde estilo_deseado puede tomar los valores: ISO , SQL , Postgres y German , de acuerdo a la siguiente tabla:

Tabla 1. Estilos de entrada de fechas y horas

Especificación del estiloDescripciónEjemplo
'ISO'Norma ISO-86011997-12-17 07:37:16-08
'SQL'Estilo tradicional12/17/1997 07:37:16.00 PST
'Postgres'Estilo originalWed Dec 17 07:37:16 1997 PST
'German'Estilo regional17.12.1997 07:37:16.00 PST

Los diversos estilos tienen las variantes European y NonEuropean o US. El primer mundo se olvida de que el Sur también existe.

A continuación aparece un script desarrollado con Perl y DBI, en donde se muestra como se modifica el formato de salida al cambiar el estilo de la fecha. La estructura de la tabla utilizada es la siguiente:

                                      Table "persona"
      Attribute      |   Type    |                         Modifier                         
---------------------+-----------+----------------------------------------------------------
 id_persona          | integer   | not null default nextval('persona_id_persona_seq'::text)
 id_titulo           | integer   | 
 nombre              | text      | 
 apel_pat            | text      | 
 apel_mat            | text      | 
 salario             | money     | 
 fecha_contrato      | date      | 
 fecha_actualizacion | timestamp | 
Index: persona_id_persona_key

Observe que el campo fecha_actualizacion es de tipo timestamp y que en la sentencia SQL del script estamos recuperando la fecha y la hora, y, por medio de la función date(), solamente la fecha, para visualizar claramente el efecto del cambio de formato.

#!/usr/bin/perl -w

# La vida es simple con DBI
use DBI;

# Base de datos de prueba
$dbname = 'pruebas';

# Conexión a la base de datos
$dbh = DBI -> connect("dbi:Pg:dbname=$dbname");

# Más vale...
defined ($dbh) or die "No pude conectar a la base de datos.\n";

# Arreglo de estilos de salida para postgresqldocsql 7.x
@estilos_salida = qw(Postgres ISO SQL German);

# Fijamos el estilo de entrada, aunque no es usado en este script.
$dbh->do("SET DATESTYLE TO 'European'");

# Nuestra sentencia SQL nos trae la fecha de actualización de los datos
$sql = "SELECT fecha_actualizacion, date(fecha_actualizacion) FROM persona WHERE id_persona = 1;";

print "-=" x 35, "\n";
print "Estilo          Fecha/Hora                Fecha\n";
print "-=" x 35, "\n";

# Visitamos cada estilo y hacemos la consulta
foreach $estilo (@estilos_salida) {
	$dbh->do("SET DATESTYLE TO '$estilo'");
	$sth=$dbh->prepare($sql);
	$sth->execute;
	while ( @row = $sth->fetchrow_array ) {
		print "$estilo:\t\t$row[0]\t\t$row[1]\n";
	}
}

La salida debe ser algo como:

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Estilo          Fecha/Hora                		Fecha
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Postgres:	Tue 01 Aug 11:43:10 2000 CDT		01-08-2000
ISO:		2000-08-01 11:43:10-05			2000-08-01
SQL:		01/08/2000 11:43:10.00 CDT		01/08/2000
German:		01.08.2000 11:43:10.00 CDT		01.08.2000

Es notable la diferencia en que se despliegan las fechas en el estilo Postgres, en un caso muestra el nombre abreviado del día y del mes, pero al usar la función date() el formato es numérico. Esto es de primordial importancia cuando se requiere analizar sintácticamente la salida de este tipo de datos, ya sea para desplegarla o validarla.