Re: " duda con sentencia"

From: Pascual De Ruvo <deruvo(at)gmail(dot)com>
To: Nicolas Sorich <nsorich(at)udec(dot)cl>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: " duda con sentencia"
Date: 2005-07-21 03:49:54
Message-ID: fb73c1ee05072020492af99eb@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Horacio Degiorgi 2005-07-21 04:33:02 Re: Ayuda con formato de Fecha
Previous Message fernando villarroel 2005-07-20 23:15:11 Ayuda con formato de Fecha