Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   ayuda con un update (https://www.clubdelphi.com/foros/showthread.php?t=54744)

ingmichel 28-03-2008 21:07:33

ayuda con un update
 
buenas tardes a todos, tengo un pequeño problema resulta que tengo en una tabla los campos de fecha divididos es decir tengo un campo dia tipo int,mes de tipo varchar y el año de tipo int, la tabla ya tiene muchos registros pero quiero hacerle un update quiero que en el campo mes donde tenga por ejemplo enero me lo reemplace por 01, febrero por 02 y asi sucesivamente,
he estado investigando por la web y tengo la opcion de usar un cursor pero quiero ver k ustedes me recomiendan y asi le sirva la duda a alguien mas


gracias de antemano...

keyboy 28-03-2008 21:19:27

Código SQL [-]
update tutabla
set mes = '01' where mes = 'enero'

y repites para los otros meses.

Bye

ingmichel 28-03-2008 21:22:45

hola keyboy
 
hola keyboy gracias por responderme pero esa solucion fue en la primera k pense y no me parece muy profesional por eso no he optado por usarla, kiero mas bien hacerla algo mas complicada por ejemplo con un cursor o un store procedure....

eduarcol 28-03-2008 21:26:20

Cita:

Empezado por ingmichel (Mensaje 276068)
hola keyboy gracias por responderme pero esa solucion fue en la primera k pense y no me parece muy profesional por eso no he optado por usarla, kiero mas bien hacerla algo mas complicada por ejemplo con un cursor o un store procedure....

:eek::eek::confused:

keyboy 28-03-2008 21:40:13

Cita:

Empezado por ingmichel (Mensaje 276068)
kiero mas bien hacerla algo mas complicada

Código SQL [-]
update tutabla
set mes =
  trim(substring("enero     febrero   marzo     abril     mayo      junio     julio     agosto    septiembreoctubre   noviembre diciembre",
  (cast(mes as integer) - 1)*10, 10))

¡Ah! No. Era alrevés :D. Bueno, ya pensaré en algo.

Bye

ingmichel 28-03-2008 21:59:44

Cita:

Empezado por keyboy (Mensaje 276075)
Código SQL [-]
update tutabla
set mes =
trim(substring("enero febrero marzo abril mayo junio julio agosto septiembreoctubre noviembre diciembre",
(cast(mes as integer) - 1)*10, 10))





¡Ah! No. Era alrevés :D. Bueno, ya pensaré en algo.

Bye


hola keyboy el codigo k escribiste me da error me dice
Invalid column name 'enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre'.

a que se deberá esto ?

egostar 28-03-2008 22:03:51

Cita:

Empezado por ingmichel (Mensaje 276068)
..... no me parece muy profesional ....... kiero mas bien hacerla algo mas complicada

O sea, dejame tratar de entender, complicado es sinónimo de profesional :confused::confused::eek:

Cita:

Empezado por ingmichel (Mensaje 276068)
por ejemplo con un cursor o un store procedure....

Y ya has tratado algo :confused: y no has podido......., bueno a reserva de que me hagan sentir villano de nuevo ;) porque no cooperas con algo de código, así aprendemos a hacer las cosas profesionalmente complicadas..... :D:D:D

Salud OS

eduarcol 28-03-2008 22:09:08

Cita:

Empezado por egostar (Mensaje 276081)
O sea, dejame tratar de entender, complicado es sinónimo de profesional :confused::confused::eek:



Y ya has tratado algo :confused: y no has podido......., bueno a reserva de que me hagan sentir villano de nuevo ;) porque no cooperas con algo de código, así aprendemos a hacer las cosas profesionalmente complicadas..... :D:D:D

Salud OS

Porque en lugar de responder sandeces no le das el codigo, es obvio que lo que quiere es cambiar el cursor del mouse :D:D

ingmichel 28-03-2008 22:14:47

Gracias Keyboy
 
HOLA KEYBOY GRACIAS POR TU TIEMPO CREO K YA ENCONTRE LA SOLUCION,
CREE UN STORE PROCEDURE EL CODIGO ES EL SIGUIENTE:

CREATE PROCEDURE SP_UPDATE
AS
while exists(select MES from visa_ch
where mes='ENERO' )
BEGIN
update visa_ch
set mes='01' where mes='ENERO'
if (select count(mes) from visa_ch
where mes='ENERO') <= 0
BREAK
ELSE
PRINT ' YA ACTUALIZE HAY DATOS'
continue
end

ESTE ES EL EJEMPLO DE ENERO PARA LOS DEMAS MES SOLO HAY K CAMBIAR ALGUNAS COSILLAS, GRACIAS DE TODOS MODOS KEYBOY FELIZ RESTO DEL DIA...

egostar 28-03-2008 22:23:51

Hola, yo de nuevo

Veamos

Pensando en que tu procedimiento ya funcionó,

Cambias
  1. Enero a Febrero
  2. Febrero a Marzo
  3. Marzo a Abril
  4. Abril a Mayo
  5. Mayo a Junio
  6. Junio a Julio
  7. Julio a Agosto
  8. Agosto a Septiembre
  9. Septiembre a Octubre
  10. Octubre a Noviembre
  11. Noviembre a Diciembre
  12. Diciembre a .......

Si no se tiene algo de cuidado, en una de esas todos los registros estarán asignados al último mes.......:eek:

Salud OS

ingmichel 28-03-2008 22:28:27

agradezco sugerencia
 
Cita:

Empezado por egostar (Mensaje 276087)
Hola, yo de nuevo

Veamos

Pensando en que tu procedimiento ya funcionó,

Cambias
  1. Enero a Febrero
  2. Febrero a Marzo
  3. Marzo a Abril
  4. Abril a Mayo
  5. Mayo a Junio
  6. Junio a Julio
  7. Julio a Agosto
  8. Agosto a Septiembre
  9. Septiembre a Octubre
  10. Octubre a Noviembre
  11. Noviembre a Diciembre
  12. Diciembre a .......
Si no se tiene algo de cuidado, en una de esas todos los registros estarán asignados al último mes.......:eek:


Salud OS

hola egostar, gracias por tu sugerencia se bien a lo que te refieres pero como sabras en todas partes febrero es el mes 2 marzo el 3 y asi sucesivamente asi k no creo k haya problemas, de todas formas gracias hasta luego...

keyboy 29-03-2008 00:39:33

Aquí es donde aplica el KISS principle.

Originalmente había pensado poner algo como:

Código SQL [-]
update tutabla
set mes = case mes
  when 'enero' then '01'
  when 'febrero' then '02'
  when 'marzo' then '03'

  ...

  when 'diciembre' then '12'
end

(la notación es de MySQL; supongo que SQL Server tendrá algo parecido), que hace la actualización en un sólo paso, pero para algo que se hace una sóla vez, pensé que no valía la pena; era más fácil hacer la consulta para un mes y reptirla cambiando los parámetros.

Si esta operación es algo que deba hacerse de manera regular, ciertamente habría que hacer algo más "profesional" que una consulta pensada para hacerla en el administrador de bases directamente. Pero no veo como ese procedimiento almacenado, que actualiza registro por registro, y que hay que repetir doce veces, pueda considerarse más profesional. Si se usa un SP, por lo menos que actualice todo en una sóla pasada.

Bye

egostar 29-03-2008 00:51:25

Cita:

Empezado por ingmichel (Mensaje 276090)
hola egostar, gracias por tu sugerencia se bien a lo que te refieres pero como sabras en todas partes febrero es el mes 2 marzo el 3 y asi sucesivamente asi k no creo k haya problemas, de todas formas gracias hasta luego...

Bueno, pues creo que por leer a media linea me equivoque en mi comentario y asi lo reconozco, pense que querias cambiar el mes pero al siguiente, bueno sin mas rollos me lie yo solito. :(

Salud OS


La franja horaria es GMT +2. Ahora son las 07:14:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi