sentencia sql para cambiar solo dia del mes

Iniciado por diego_lp, 5 Febrero 2010, 19:24 PM

0 Miembros y 1 Visitante están viendo este tema.

diego_lp

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.
Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!

ssccaann43 ©

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 (sql) [Seleccionar]

Update tbl_TuTabla set CampoFecha = DATEADD(dd, - 1, DATEADD(ms, - 3, DATEADD(mm, DATEDIFF(m, 0, CampoFecha) + 1, 0)))


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 (sql) [Seleccionar]


Select CampoID, DATEADD(dd, - 1, DATEADD(ms, - 3, DATEADD(mm, DATEDIFF(m, 0, CAMPOFECHA) + 1, 0))) AS Fecha from tbl_TuTabla



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

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

^Tifa^

Utiliza la funcion LAST_DAY chico  ;)

Checa por ejemplo tengo la siguiente tabla:

Código (sql) [Seleccionar]


mysql> select * from ejemplo;
+------------+               
| fecha      |               
+------------+               
| 2009-02-01 |               
| 2007-04-01 |               
| 2005-02-01 |               
| 2004-08-25 |               
+------------+               
4 rows in set (0.00 sec)   



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 (sql) [Seleccionar]


mysql> update ejemplo set fecha = last_day(fecha) where fecha is not null;
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0



Ahora checa que paso con la data de mi tabla:

Código (sql) [Seleccionar]


mysql> select * from ejemplo;
+------------+
| fecha      |
+------------+
| 2009-02-28 |
| 2007-04-30 |
| 2005-02-28 |
| 2004-08-31 |
+------------+
4 rows in set (0.00 sec)


ssccaann43 ©

Bueno lo hice así porque SQL Server no reconoce LAST_DAY =)
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

diego_lp

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.
Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!

ssccaann43 ©

Bueno en tal caso, si alguien requiere de esto para SQL Server, el ejemplo que he posteado funciona 100%. Ya testeado...!
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

^Tifa^

#6
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?

ssccaann43 ©

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
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

John_QZ

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.