Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   cambiar año de varias fechas firebird (https://www.clubdelphi.com/foros/showthread.php?t=89921)

KOVNEO 03-03-2016 18:24:03

cambiar año de varias fechas firebird
 
Soy nuevo en el foro tengo la tarea de cambiar la fecha de unos registros con años de 1999 a 2015
Los registros traen la fecha en el formato dd/mm/aaaa lo único que deseo cambiar es el año sin alterar los días y meses, y al ser años distintos no puedo ocupar DATEADD si me pudieran ayudar
Solo he encontrado como cambiar año por año pero al ser varios años distintos me tardaría más en actualizar año por año, aunque sea buena solución me gustaría me pudieran asesorar como podría hacerlo en un solo UPDATE
El que yo he hecho es sencillo:
Código SQL [-]
UPDATE DOCTOS_IN SET FECHA =DATEADD(13 year to FECHA)
 WHERE EXTRACT(YEAR FROM FECHA) LIKE '%2003';

Y lo que se me ocurría también pero no sé cómo hacer la asignación de que el año sea 2015.
Código SQL [-]
UPDATE DOCTOS_IN SET FECHA =……………………..
 WHERE EXTRACT(YEAR FROM FECHA) NOT LIKE '%2016';

RONPABLO 03-03-2016 20:01:49

Cita:

Empezado por KOVNEO (Mensaje 502925)
Soy nuevo en el foro tengo la tarea de cambiar la fecha de unos registros con años de 1999 a 2015
Los registros traen la fecha en el formato dd/mm/aaaa lo único que deseo cambiar es el año sin alterar los días y meses, y al ser años distintos no puedo ocupar DATEADD si me pudieran ayudar
Solo he encontrado como cambiar año por año pero al ser varios años distintos me tardaría más en actualizar año por año, aunque sea buena solución me gustaría me pudieran asesorar como podría hacerlo en un solo UPDATE
El que yo he hecho es sencillo:
Código SQL [-]
UPDATE DOCTOS_IN SET FECHA =DATEADD(13 year to FECHA)
 WHERE EXTRACT(YEAR FROM FECHA) LIKE '%2003';

Y lo que se me ocurría también pero no sé cómo hacer la asignación de que el año sea 2015.
Código SQL [-]
UPDATE DOCTOS_IN SET FECHA =……………………..
 WHERE EXTRACT(YEAR FROM FECHA) NOT LIKE '%2016';

Código SQL [-]

UPDATE DOCTOS_IN SET FECHA =DATEADD(datediff (year from FECHA to cast('now' as date)) year to FECHA)

Tal vez algo así??
Cita:

datediff = saca la diferencia (en este caso de años) entre una fecha y otra
cast('now' as date) convierte a la fecha actual del sistema en donde corre firebird

KOVNEO 03-03-2016 20:50:27

Lo probé pero no es la solución ya que todas las fechas se cambian a la fecha del sistema, y mi problema es que quiero cambiar solo los años al 2015 todas las fechas acepto las del 2016 por ejemplo:
11/02/1999 a 11/02/2015
23/09/2010 a 23/09/2015
01/06/2012 a 01/06/2015
30/08/2000 a 30/08/2015
01/01/2016

KOVNEO 03-03-2016 22:11:41

PERDÓN GRACIAS JAJAJAJA ME RESOLVISTE MI PROBLEMA SOLO QUE NO LO AVÍA ENTENDIDO CORRECTAMENTE

"UPDATE DOCTOS_IN SET FECHA =DATEADD(datediff (year from FECHA to cast('01/01/2015' as date)) year to FECHA)
WHERE EXTRACT(YEAR FROM FECHA) NOT LIKE '%2016';"

Lepe 03-03-2016 22:46:24

A mí me sale otra sql, sin usar matemáticas, aunque dará problemas con los años bisiestos al pasarlos a 2015
Código SQL [-]
UPDATE DOCTOS_IN SET FECHA =
cast( 
  extract(day from fecha) || '/' ||
  extract(month from fecha) || '/2015' as date)
where EXTRACT(YEAR FROM FECHA) < 2016

Casimiro Notevi 04-03-2016 00:57:13

Cita:

Empezado por KOVNEO (Mensaje 502930)
PERDÓN GRACIAS JAJAJAJA ME RESOLVISTE MI PROBLEMA SOLO QUE NO LO AVÍA ENTENDIDO CORRECTAMENTE
"UPDATE DOCTOS_IN SET FECHA =DATEADD(datediff (year from FECHA to cast('01/01/2015' as date)) year to FECHA)
WHERE EXTRACT(YEAR FROM FECHA) NOT LIKE '%2016';"

Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)


Recuerda poner los tags al código fuente, ejemplo:



La franja horaria es GMT +2. Ahora son las 20:52:31.

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