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 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
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>
From | Date | Subject | |
---|---|---|---|
Next Message | Alejandro Carrillo | 2012-04-17 22:09:27 | Re: [pgsql-es-ayuda] Actualización de fzpgloader (modo grafico) |
Previous Message | Alvaro Herrera | 2012-04-16 19:02:29 | Re: Existe un tipo de dato Query o forma de castear un text a una sentencia SQL? |