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 estilo | Descripci�n | Ejemplo |
---|
'ISO' | Norma ISO-8601 | 1997-12-17 07:37:16-08 |
'SQL' | Estilo tradicional | 12/17/1997 07:37:16.00 PST |
'Postgres' | Estilo original | Wed Dec 17 07:37:16 1997 PST |
'German' | Estilo regional | 17.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.