Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: diego_lp en 5 Febrero 2010, 19:24 pm



Título: sentencia sql para cambiar solo dia del mes
Publicado por: diego_lp en 5 Febrero 2010, 19:24 pm
Hola.
Tengo un problema bastante grande, tengo una base de datos mysql, una de sus tablas tiene un campo fecha del tipo date.
Esta en ésta tabla tengo muchos registros (mas de 5000  :rolleyes:).
El problema es que a todos los registros tengo que cambiarles el dia de la fecha, es decir, todos los registros tienen el siguiente valor aaaa-mm-dd en donde dd es siempre 01 (para todas las fechas tengo el primer dia del mes), ahora necesito cambiarlos al ultimo dia del mes, es decir, 31 o 30 (sin mencionar febrero).
Me volvería loo si tuviese que cambiar fecha por fecha, necesito saber si hay un modo de hacerlo a traves de una sentencia sql, sé que existe el comando REPLACE pero no sé como obtener el ultimo dia del mes ya que no puedo setear todo a 30 o 31 de manera indiscriminada  :huh:
Espero que entiendan mi problema y puedan ayudarme   :-(
Muchas gracias.


Título: Re: sentencia sql para cambiar solo dia del mes
Publicado por: ssccaann43 © en 5 Febrero 2010, 19:56 pm
Bueno...

Te explico como puedes hacerlo.... estuve armando esto en SQL Server, ya que no tengo MySQL a la mano, pero debería funcionar...

Código
  1. UPDATE tbl_TuTabla SET CampoFecha = DATEADD(dd, - 1, DATEADD(ms, - 3, DATEADD(mm, DATEDIFF(m, 0, CampoFecha) + 1, 0)))
  2.  

Puedes intentar inicialmente haciendo un select a ver si te muestra el último día del mes de la fecha que tienes alli en la tabla... Hazlo así...

Código
  1.  
  2. SELECT CampoID, DATEADD(dd, - 1, DATEADD(ms, - 3, DATEADD(mm, DATEDIFF(m, 0, CAMPOFECHA) + 1, 0))) AS Fecha FROM tbl_TuTabla
  3.  
  4.  

De resultarte la consulta SQL, te aseguro que podras actualizarla con la primera instrucción que te adjunto allí...

Cualquier duda, postea... Saludos


Título: Re: sentencia sql para cambiar solo dia del mes
Publicado por: ^Tifa^ en 5 Febrero 2010, 20:11 pm
Utiliza la funcion LAST_DAY chico  ;)

Checa por ejemplo tengo la siguiente tabla:

Código
  1.  
  2. mysql> SELECT * FROM ejemplo;
  3. +------------+              
  4. | fecha      |              
  5. +------------+              
  6. | 2009-02-01 |              
  7. | 2007-04-01 |              
  8. | 2005-02-01 |              
  9. | 2004-08-25 |              
  10. +------------+              
  11. 4 ROWS IN SET (0.00 sec)    
  12.  
  13.  

Ahora quiero actualizar todas las fechas al ultimo dia de su mes correspondiente (incluyendo si es Febrero y si es o no Bisiesto):

Código
  1.  
  2. mysql> UPDATE ejemplo SET fecha = last_day(fecha) WHERE fecha IS NOT NULL;
  3. Query OK, 4 ROWS affected (0.01 sec)
  4. ROWS matched: 4  Changed: 4  Warnings: 0
  5.  
  6.  

Ahora checa que paso con la data de mi tabla:

Código
  1.  
  2. mysql> SELECT * FROM ejemplo;
  3. +------------+
  4. | fecha      |
  5. +------------+
  6. | 2009-02-28 |
  7. | 2007-04-30 |
  8. | 2005-02-28 |
  9. | 2004-08-31 |
  10. +------------+
  11. 4 ROWS IN SET (0.00 sec)
  12.  
  13.  


Título: Re: sentencia sql para cambiar solo dia del mes
Publicado por: ssccaann43 © en 5 Febrero 2010, 20:17 pm
Bueno lo hice así porque SQL Server no reconoce LAST_DAY =)


Título: Re: sentencia sql para cambiar solo dia del mes
Publicado por: diego_lp en 5 Febrero 2010, 20:26 pm
Gracias a ámbos por sus respuestas  ;D
Lo solucioné con la respuesta de ^TiFa^ (¡sos la mejor!  :o) ya que era mas sencilla, además la respuesta de ssccaann43 me da error de sintaxis en mysql.
De todos modos se les agradece a ámbos.
Saludos.


Título: Re: sentencia sql para cambiar solo dia del mes
Publicado por: ssccaann43 © en 5 Febrero 2010, 20:28 pm
Bueno en tal caso, si alguien requiere de esto para SQL Server, el ejemplo que he posteado funciona 100%. Ya testeado...!


Título: Re: sentencia sql para cambiar solo dia del mes
Publicado por: ^Tifa^ en 5 Febrero 2010, 20:31 pm
Y SQL Server no tiene una funcion similar a LAST_DAY???? porque existe en Mysql como en Oracle...

Lo pregunto por la sencilla razon que si se da la situacion que el año es bisiesto o no??? como maneja alguien esto? o cuando el mes es de 30 o 31 dias? Creo que esto se podria manejar con un procedimiento almacenado pero... no hay una mejor forma a algo asi?


Título: Re: sentencia sql para cambiar solo dia del mes
Publicado por: ssccaann43 © en 5 Febrero 2010, 20:53 pm
Así como lo hice, pues lo muestra y lo hace... Pero la verdad no encontre algo similar a LAST_DAY... Fui a donde un chino a buscar una lumpia para fumarmela antes de responder... Jajaja XD

Y de darse el caso de año bisiesto, pues lo muestra perfectamente bien...! XD


Título: Re: sentencia sql para cambiar solo dia del mes
Publicado por: John_QZ en 13 Enero 2012, 00:20 am
Hola, para el caso que se menciona cual seria la instruccion si quisiera cambiar la fecha por un dia especifico en el mes, se menciona que cambia la fecha al ultimo dia del mes, pero por ejemplo si quisiera que sea cambiada a todos los 20 de cada mes.
Gracias.