Re: " duda con sentencia"

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?

In response to

Browse pgsql-es-ayuda by date

  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?