Skip site navigation (1) Skip section navigation (2)

Re: Ordenar resultados de tipo 1.1, 1.2, 1.2.1, 1.3, etc...

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Rodrigo Ruiz <rruizf(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ordenar resultados de tipo 1.1, 1.2, 1.2.1, 1.3, etc...
Date: 2012-04-17 19:14:19
Message-ID: 1334689375-sup-1997@alvh.no-ip.org (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Excerpts from Rodrigo Ruiz's message of jue abr 12 19:13:57 -0300 2012:
> Estimados,
> hace un tiempo me ayudaron en cómo ordenar los resultados de una 
> consulta de acuerdo a un varchar que debiese ser ingresado de la forma 
> x.y.z, al estilo de capítulos.
> Esto lo hago ordenando por 'ORDER BY 
> cast(regexp_split_to_array(e.capitulo, E'\\\\.') as integer[]) ASC', sin 
> embargo, el sistema permite ingresar un dato de la forma 1.2.3. (punto 
> al final), entonces la consulta se cae.
> Qué me recomiendan?, validar al momento de ingresar/modificar o cambiar 
> la función al ordenar?
> Aún así, no estoy muy seguro como validar, al momento de 
> ingresar/modificar, el campo capitulo para que vaya en la forma 1.2.3, 
> con un solo punto entre números y sin otro caracter antes o después del 
> primer y último numero.

Creo que lo más sensato sería tener una restricción CHECK que impida
poner puntos en otras posiciones que entre dos números.  No es muy
sencillo pero podrías usar una expresión regular como esta:

create table libro (
   capitulo text check (capitulo ~ '^([0-9]+\.|[0-9]+$)*([0-9]+)$')
);

Quizás haya una manera más simple de expresarlo, pero esa parece
funcionar bien.

-- 
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

In response to

pgsql-es-ayuda by date

Next:From: Alejandro CarrilloDate: 2012-04-17 22:09:27
Subject: Re: [pgsql-es-ayuda] Actualización de fzpgloader (modo grafico)
Previous:From: Alvaro HerreraDate: 2012-04-16 19:02:29
Subject: Re: Existe un tipo de dato Query o forma de castear un text a una sentencia SQL?

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group