From: | "Nicolas Sorich" <nsorich(at)udec(dot)cl> |
---|---|
To: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: " duda con sentencia" |
Date: | 2005-07-21 15:39:06 |
Message-ID: | 42DFC19A.00001A.01596@PASO2 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
se llama idfabrica y es un integer ....
salu2
Nico Sorich
-------Mensaje original-------
De: Pascual De Ruvo
Fecha: 07/20/05 23:51:04
Para: Nicolas Sorich
CC: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] " duda con sentencia"
Recuerda siempre responder a la lista
On 7/20/05, Nicolas Sorich <nsorich(at)udec(dot)cl> wrote:
el problemaes que tengo datos antiguos de una traspaso que hice con el
siguiente formato
En qué tipo de columna y con qué formato se encuentra la data antigua?
ejecuto
select extract( year from current_date) || lpad(nextval(idalumno), 3, '0')
from alumno1 order by idalumno asc;
y me sale que tengo el siguiente error
ERROR: no existe la relación "890186",
Como puedes ver en la documentacion http://www.postgresql.org/docs/8
0/static/functions-sequence.html ,
la funcion nextval(text) recibe como parámetro un texto que debe ser el
nombre de una secuencia, aparentemente la estás invocando pasando como
parámetro el nombre de una columna (idalumno). Debes crear una secuencia (ej
seq_alumno e invocar la función de la siguiente manera: nextval('seq_alumno
).
o sea tengo registros antiguos que no empiezan con el añoaño2005 en este
caso, alguna sugerencia
Tienes una columna de fecha que contenga el año?
Entiendo que tienes una columna llamada idalumno que contiene valores
secuenciales, pero todavía no me queda claro lo que deseas hacer...
Deseas actualizar la data de la tabla de manera que en una columna se
almacene el año concatenado con un valor secuencial de tres posiciones
rellenado con ceros a la izquierda?
citando tu ejemplo:
2005001
2005002
(Fíjate que de ser así sólo podrás almacenar 999 alumnos por año - 2005999)
Si este es el caso, deberias hacer algo como:
select extract(year from fecha) || lpad(idalumno,3,'0') from ...
De esa manera ya tendrías la data antigua en el formato que deseas.
Para que los nuevos registros se inserten con ese formato, en el valor
default del campo debes colocar:
select extract( year from current_date) || lpad(nextval('secuencia'), 3, '0
)
Si 3 posiciones no son suficientes como lo supongo, debes cambiar el número
3 por un valor más elevado
Otra cosa que no me queda clara es: Deseas que el valor secuencial se
reinicie automáticamente cada año o que aumente indefinidamnte?
From | Date | Subject | |
---|---|---|---|
Next Message | Paul Espin Huayamabe | 2005-07-21 15:50:46 | ayuda postgres+java |
Previous Message | Juan Pablo Espino | 2005-07-21 15:34:24 | Re: Licencia BDS? |