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 <[email protected]> - Enviado a la lista de correo pgsql-es-ayuda ([email protected]) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda
