In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Calcular columna

SQL databases
miguel
Posts: 364
Joined: Thu Jul 02, 2009 1:09 pm

Calcular columna

Postby miguel » Sun Oct 01, 2006 12:20 pm

dada esta tabla en SQL Server
id int NULL,
code varchar(10) NULL,
fecha datetime NULL
id code fecha
-------- ---------- ----------
0 AB123 01/05/1999
0 AB123 02/05/1999
0 AB123 02/05/1999
0 AB123 04/05/1999
0 AA456 05/09/1998
0 AA329 05/09/1998
0 NW234 10/07/2001
Se trata de actualizar la columna ID con los 4 digitos de año mas los 2
de la semana mas un numero ordinal.
Quedarí­a así­
id code fecha
-------- ---------- ----------
1999180001 AB123 01/05/1999
1999180002 AB123 02/05/1999
1999180003 AB123 02/05/1999
1999180004 AB123 01/05/1999
1998360001 AA456 05/09/1998
1998360002 AA329 05/09/1998
2001280001 NW234 10/07/2001
donde : 1999 año, 18 Nº semana 0004 ordinal de la semana
Saludos. Miguel A. Torrellas
jose.luis
Posts: 1633
Joined: Fri Oct 14, 2005 10:56 pm

Calcular columna

Postby jose.luis » Tue Oct 03, 2006 10:09 pm

Miguel,
Primero deberí­amos ver si existen las tres funciones necesarias para la
transformación que propones. Si no existe, crear dos udf.
Después yo cambiarí­a el tipo Int de Id por un, por ejemplo, bigint
(1999180001 no cabe en un int).
Y después creas un procedimiento almacenado donde abres un cursor con los
datos que quieres modificar y lo recorres aplicando los cambios que
propones.
Tambien puedes crear una instrucción DML más o menos así­ (puede que con los
ceros me haya equivocado en algo).
UPDATE MiTabla SET id = YEAR( fecha ) * 1000000 + WEEK( fecha ) * 10000 +
CONTADOR() WHERE ....
Espero te sirva de guí­a y ayuda.
Saludos,
José Luis Capel
Miguel A. Torrellas wrote:
> dada esta tabla en SQL Server
>
> id int NULL,
> code varchar(10) NULL,
> fecha datetime NULL
>
> id code fecha
> -------- ---------- ----------
> 0 AB123 01/05/1999
> 0 AB123 02/05/1999
> 0 AB123 02/05/1999
> 0 AB123 04/05/1999
> 0 AA456 05/09/1998
> 0 AA329 05/09/1998
> 0 NW234 10/07/2001
>
> Se trata de actualizar la columna ID con los 4 digitos de año mas los 2
> de la semana mas un numero ordinal.
>
> Quedarí­a así­
>
> id code fecha
> -------- ---------- ----------
> 1999180001 AB123 01/05/1999
> 1999180002 AB123 02/05/1999
> 1999180003 AB123 02/05/1999
> 1999180004 AB123 01/05/1999
> 1998360001 AA456 05/09/1998
> 1998360002 AA329 05/09/1998
> 2001280001 NW234 10/07/2001
>
> donde : 1999 año, 18 Nº semana 0004 ordinal de la semana
>
> Saludos. Miguel A. Torrellas
miguel
Posts: 364
Joined: Thu Jul 02, 2009 1:09 pm

Calcular columna

Postby miguel » Tue Oct 03, 2006 10:45 pm

Gracias por tu respuesta Jose Luis.
De lo que se trata es de crear un desencadenador en SQL Server, de tal
forma que tanto en INSERT com UPDATE actualice la columna
automáticamente partiendo de otra columna de la misma tabla de tipo
datetime. Ye me he mareado bastante con esto debido a que mis
conocimientos en SQL son mas bien escasos, aunque si bien es cierto que
gracias a todos vosotros voy haciendo mis pinitos, de hecho tengo una
aplicación ya casi rodando con casi todas funciones en el servidor y
atacando a este con Xailer , con tus clases de ADO y ODBC, dejándole a
este los SELECT para cargar los MemDateSets, los UPDATES y poco mas.
Necesito ideas para desarrollar este desencadenador.
Gracias de nuevo.
Saludos Miguel A. Torrellas
José Luis Capel escribió:
> Miguel,
>
> Primero deberí­amos ver si existen las tres funciones necesarias para la
> transformación que propones. Si no existe, crear dos udf.
>
> Después yo cambiarí­a el tipo Int de Id por un, por ejemplo, bigint
> (1999180001 no cabe en un int).
>
> Y después creas un procedimiento almacenado donde abres un cursor con los
> datos que quieres modificar y lo recorres aplicando los cambios que
> propones.
>
> Tambien puedes crear una instrucción DML más o menos así­ (puede que con los
> ceros me haya equivocado en algo).
>
> UPDATE MiTabla SET id = YEAR( fecha ) * 1000000 + WEEK( fecha ) * 10000 +
> CONTADOR() WHERE ....
>
> Espero te sirva de guí­a y ayuda.
> Saludos,
> José Luis Capel
>
>
>

Return to “SQL”