Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Transformar formato de fecha y concat

Estas en el tema de Transformar formato de fecha y concat en el foro de Mysql en Foros del Web. Buenas tengo una table con los siguientes datos: Código PHP: CREATE TABLE  IF  NOT EXISTS  ` ephem ` (   ` eid `  int ( 11 )  NOT NULL auto_increment , ...
  #1 (permalink)  
Antiguo 21/06/2008, 16:48
Avatar de cauly  
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires
Mensajes: 726
Antigüedad: 22 años, 2 meses
Puntos: 0
Transformar formato de fecha y concat

Buenas tengo una table con los siguientes datos:

Código PHP:
CREATE TABLE IF NOT EXISTS `ephem` (
  `
eidint(11NOT NULL auto_increment,
  `
didint(2NOT NULL default '0',
  `
midint(2NOT NULL default '0',
  `
yidint(4NOT NULL default '0',
  `
contenttext NOT NULL,
  `
elanguagevarchar(30NOT NULL default '',
  
PRIMARY KEY  (`eid`),
  
KEY `eid` (`eid`)
ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=413 
y quiero insertar los datos en otra tabla, con el siguiente script tengo todo listo, salvo una cosa que es la de cambiar el formato de la fecha:

Código PHP:
INSERT  INTO nodenidvidtypetitleuidstatuscreatedchangedcommentpromotemoderatestickylanguagetnidtranslate)
SELECT 8056+eid8119+eid"efem"CONCAT("Efemérides del "did,"/",mid), 01"aca fecha""aca fecha"0000"es"00 FROM nuke_ephem
donde dice "aca fecha" debería tomar los datos did, mid y yid (dia, mes y año respectivamente) de la tabla nuke_ephem y convertirlos al formato: "1186214929" (en ese ejemplo la fecha es el 4 de Agosto del 2007).
el campo did y mid tienen guardado el dia y mes en formato 1 (no 01) y el yid tiene todos valores 0 (que lo podría cambiar a 2004 así me queda en un año biciesto, ya que existe un valor para el 29 de Febrero).

La pregunta es que tengo que poner en "aca fecha" para importar en la tabla nueva "node" los datos de las fechas pero transformados al formato "1186214929" donde todos queden días en el año 2004 y se respete el día y mes de los valores did y mid.

intenté con UNIX_TIMESTAMP pero tengo que hacer un concat para juntar el did y mid y no sé bien como hacer
  #2 (permalink)  
Antiguo 22/06/2008, 01:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Transformar formato de fecha y concat

El problema es que el concat sólo une cadenas de texto y no campos numéricos; para concatenar números debes convertir los numéricos a cadena mediante un CAST AS CHAR
CONCAT("Efemérides del ", CAST (did AS CHAR),"/",CAST (mid AS CHAR)),

A ver si con eso lo solucionas
  #3 (permalink)  
Antiguo 22/06/2008, 12:51
Avatar de cauly  
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires
Mensajes: 726
Antigüedad: 22 años, 2 meses
Puntos: 0
Respuesta: Transformar formato de fecha y concat

Gracias jurena por contestar, mirá esa parte que me pusiste la pude resolver con el concat, el tema es en donde dice "aca fecha" que ahí debería ir la fecha de la forma "1186214929" y no como 4/8, o sea tengo dos datos did y mid (eventualmente tres que sería yid que es el año, pero está en todas las tablas con valor 0 por eso no lo nombro); esos dos datos (did y mid) los tengo que juntar y quedaría por ej "22/6" para el 22 de junio, lo que quiero es esa fecha convertirla a formato 1186214929
  #4 (permalink)  
Antiguo 22/06/2008, 16:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Transformar formato de fecha y concat

SELECT UNIX_TIMESTAMP(CAST(CONCAT(CAST(yid AS CHAR),IF(mid > 9, CAST(mid AS CHAR), CONCAT('0',CAST(mid AS CHAR))),IF(did > 9, CAST(did AS CHAR), CONCAT('0',CAST(did AS CHAR)))) AS DATE)) FROM `ephem`

Esto te devuelve el timestamp, siempre que sea posterior al año 1970. Un problema es el 0 para año. El resultado de esas fechas es NULL. Tendrías que decir qué significa por defecto 0: que no hay fecha, que es un año determinado, para poder con ello modificar la sintaxis y sacarte lo que quieres.
  #5 (permalink)  
Antiguo 22/06/2008, 17:29
Avatar de cauly  
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires
Mensajes: 726
Antigüedad: 22 años, 2 meses
Puntos: 0
Respuesta: Transformar formato de fecha y concat

mirá se agregó en la tabla esa que maneja las efemérides el valor en cada efeméride yid 0, no sé bien por qué, de cualquier manera podría cambiar todos los valores esos a 2004 (así me queda el año igual en todos) y despues sí transformar el formato de la fecha.
  #6 (permalink)  
Antiguo 22/06/2008, 23:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Transformar formato de fecha y concat

En ese campo yid guarda por defecto el '0', como tú le habías dicho al crear la tabla (nunca escribes nada).
Si eso es así y siempre vas a computar el año como 2004, no entiendo bien por qué guardas ningún dato yid en la base, ni siquiera el 0 que guarda por defecto. Te bastará con ponerlo así:

SELECT UNIX_TIMESTAMP(CAST(CONCAT('2004',IF(mid > 9, CAST(mid AS CHAR), CONCAT('0',CAST(mid AS CHAR))),IF(did > 9, CAST(did AS CHAR), CONCAT('0',CAST(did AS CHAR)))) AS DATE)) FROM `ephem`

Pero no olvides la naturaleza de tu timestamp, los segundos pasados desde '1970-01-01 00:00:00 hasta 2004-mid-did 00:00:00 '.

EDITO para decirte que esto que te pongo tal vez resuelva parte del problema, pero no el problema, que en mi opinión tiene que ver más con el modo en que introduces los datos y la naturaleza de los mismos en la base de datos. Tal vez no tengas todavía muchos datos en la base y estés preparando las consultas. Si es así, yo vería el modo de introducir los datos de otra manera y con otra naturaleza. Dinos por qué los introduces así (sin año, como numéricos) y cuál es el objetivo que buscas con las consultas. Tal vez alguien pueda orientarte sobre lo mejor para tu caso, y te ahorres problemas en el futuro.

Última edición por jurena; 23/06/2008 a las 00:44
  #7 (permalink)  
Antiguo 23/06/2008, 13:52
Avatar de cauly  
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires
Mensajes: 726
Antigüedad: 22 años, 2 meses
Puntos: 0
Respuesta: Transformar formato de fecha y concat

MIL gracias funcionó perfecto.

Te comento como es el tema, tenía en php-nuke una página que viene con un módulo para agregar efemérides, el mismo se introducían los datos como te mostré antes (en un campo el día, en otro el mes y en otro el año), las efemérides estaban completas (o sea cada día del año tiene algún dato, alguna efeméride), pero en todas el campo yid (correspondiente al año) estaba en 0 y en el contenido de la efeméride se aclaraba de que año era tal evento (por ejemplo una dice: 27 de Septiembre: día de que se yo que y despues aclara que en el año tal pasó tal cosa y así). Ahora (bah hace un tiempo) pasé todo el sitio a Drupal y me quedó eso de las efemérides que nunca lo había pasado, no voy a ingresar más datos (a lo sumo editar algún día) es por eso que solo tengo que importar desde una tabla que es de php-nuke a otra de drupal.
  #8 (permalink)  
Antiguo 23/06/2008, 15:41
Avatar de cauly  
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires
Mensajes: 726
Antigüedad: 22 años, 2 meses
Puntos: 0
Respuesta: Transformar formato de fecha y concat

Te agrego un ejemplo para que veas como quedó:

http://www.publicasonline.com/node/8123

Saludos
  #9 (permalink)  
Antiguo 24/06/2008, 00:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Transformar formato de fecha y concat

Gracias, cauly, y me alegro de que te funcione.
Tal vez no he entendido bien algo, pero si tú tienes las efemérides con la fecha YYYY-MM-DD en la base de datos, encontrarlas te resultará muy fácil con esos dos datos de mes y día con consultas del tipo:
SELECT fechaefemeride, contenidoefemeride from ephem WHERE MONTH(fechaefemeride) = mid AND DAY(fechaefemeride) = did ORDER BY fechaefemeride
o algo así, y por supuesto puedes poner MONTH(NOW()), DAY(NOW()), para compararlas con el día de hoy.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:34.