elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  sentencia sql para cambiar solo dia del mes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: sentencia sql para cambiar solo dia del mes  (Leído 13,970 veces)
diego_lp

Desconectado Desconectado

Mensajes: 180


In a free world, who needs gates and windows?


Ver Perfil WWW
sentencia sql para cambiar solo dia del mes
« en: 5 Febrero 2010, 19:24 »

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.


En línea

Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!
ssccaann43 ©


Desconectado Desconectado

Mensajes: 792


¬¬


Ver Perfil
Re: sentencia sql para cambiar solo dia del mes
« Respuesta #1 en: 5 Febrero 2010, 19:56 »

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


En línea

- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: sentencia sql para cambiar solo dia del mes
« Respuesta #2 en: 5 Febrero 2010, 20:11 »

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.  
En línea

ssccaann43 ©


Desconectado Desconectado

Mensajes: 792


¬¬


Ver Perfil
Re: sentencia sql para cambiar solo dia del mes
« Respuesta #3 en: 5 Febrero 2010, 20:17 »

Bueno lo hice así porque SQL Server no reconoce LAST_DAY =)
En línea

- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"
diego_lp

Desconectado Desconectado

Mensajes: 180


In a free world, who needs gates and windows?


Ver Perfil WWW
Re: sentencia sql para cambiar solo dia del mes
« Respuesta #4 en: 5 Febrero 2010, 20:26 »

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.
En línea

Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!
ssccaann43 ©


Desconectado Desconectado

Mensajes: 792


¬¬


Ver Perfil
Re: sentencia sql para cambiar solo dia del mes
« Respuesta #5 en: 5 Febrero 2010, 20:28 »

Bueno en tal caso, si alguien requiere de esto para SQL Server, el ejemplo que he posteado funciona 100%. Ya testeado...!
En línea

- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: sentencia sql para cambiar solo dia del mes
« Respuesta #6 en: 5 Febrero 2010, 20:31 »

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?
« Última modificación: 5 Febrero 2010, 20:39 por ^TiFa^ » En línea

ssccaann43 ©


Desconectado Desconectado

Mensajes: 792


¬¬


Ver Perfil
Re: sentencia sql para cambiar solo dia del mes
« Respuesta #7 en: 5 Febrero 2010, 20:53 »

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
En línea

- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"
John_QZ

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: sentencia sql para cambiar solo dia del mes
« Respuesta #8 en: 13 Enero 2012, 00:20 »

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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cambiar una sentencia if else if por un if else
Programación C/C++
jamatbar 2 1,055 Último mensaje 12 Noviembre 2013, 10:36
por jamatbar
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines