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

Duda con la funcion datediff

Estas en el tema de Duda con la funcion datediff en el foro de Bases de Datos General en Foros del Web. bueno tengo un campo de mi base de datos ke me guarda la fecha en este formato dd/mm/aaaa ahora lo ke tengo ke hacer es ...
  #1 (permalink)  
Antiguo 05/04/2010, 13:41
 
Fecha de Ingreso: octubre-2009
Mensajes: 125
Antigüedad: 15 años, 1 mes
Puntos: 2
Duda con la funcion datediff

bueno tengo un campo de mi base de datos ke me guarda la fecha en este formato


dd/mm/aaaa

ahora lo ke tengo ke hacer es una consulta ke me devuelva los programas cuya vigencia no haya expirado.

por ejemplo


1 photoshop 05/04/2009

y como la fecha el dia de hoy es 05/04/2010, entonces ese si me lo tiene ke mostrar

En mysql existe datediff el problema es ke funciona asi:

aaaa/mm/dd

alguno tiene idea de como hacer esa consulta???


salu2
  #2 (permalink)  
Antiguo 05/04/2010, 13:42
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Duda con la funcion datediff

y para que lo preguntas en el foro de php si sabes que es un tema de base de datos ?
espera a que un administrador mueva tu tema!
saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 05/04/2010, 13:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Duda con la funcion datediff

el problema es de MySQL o PHP??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 05/04/2010, 14:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Tema movido desde PHP a Bases de Datos
  #5 (permalink)  
Antiguo 05/04/2010, 14:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Duda con la funcion datediff

Cita:
bueno tengo un campo de mi base de datos ke me guarda la fecha en este formato


dd/mm/aaaa
Con esto que dices asumo que guardas la fecha en un campo varchar y no date.

Asumiendo que la licencia tiene validez por un año (365 dias) podrías probar algo así:

Código SQL:
Ver original
  1. WHERE datediff(curdate(),str_to_date(campo_fecha_varchar,'%d/%m/%Y')) <= 365

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 05/04/2010, 14:49
 
Fecha de Ingreso: octubre-2009
Mensajes: 125
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Duda con la funcion datediff

Cita:
Iniciado por huesos52 Ver Mensaje
Con esto que dices asumo que guardas la fecha en un campo varchar y no date.

Asumiendo que la licencia tiene validez por un año (365 dias) podrías probar algo así:

Código SQL:
Ver original
  1. WHERE datediff(curdate(),str_to_date(campo_fecha_varchar,'%d/%m/%Y')) <= 365

saludos
si creo ke esto es lo ke necesito pero no le entiendo muy bien a la consulta podrías decirme por favor lo ke haces???

otra cosa, el campo como dices se guarda en un varchar y no en un date

otra cosa, para saber si el programa ya expiró lo ke hago es comparar la fecha del programa con la fecha actual de la pc
  #7 (permalink)  
Antiguo 05/04/2010, 15:01
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Duda con la funcion datediff

devilboy9999

datediff es una funció que retorna un valor entero que traduce el numero de dias que comprenden dos fechas. Si haces esto:
Código MySQL:
Ver original
  1. mysql> select datediff('2010-04-05','2010-04-03') as dif_dias;
  2. +----------+
  3. | dif_dias |
  4. +----------+
  5. |        2 |
  6. +----------+
  7. 1 row in set (0.09 sec)

ya que entre el 5 de abril del 2010 y el 3 de abril del 2010 hay solo dos dias.

Como tu campo es varchar, hay que castearlo a tipo date. Para eso hacemos uso de la función str_to_date. Para darle validez a tu formato sería hacer esto:

Código MySQL:
Ver original
  1. mysql> select str_to_date('05/04/2010','%d/%m/%Y') fecha_convertida;
  2. +------------------+
  3. | fecha_convertida |
  4. +------------------+
  5. | 2010-04-05       |
  6. +------------------+
  7. 1 row in set (0.00 sec)

Lo que hace es interpretar tu tipo de fecha en formato (dd/mm/yyyy) como una fecha valida para mysql.

ya con esto, nos apoyamos en la función curdate() que nos muestra la fecha actual del sistema.

Código MySQL:
Ver original
  1. mysql> select curdate();
  2. +------------+
  3. | curdate()  |
  4. +------------+
  5. | 2010-04-05 |
  6. +------------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql>

Uniendo todas estas soluciones, puedes obtener el numero de dias que ha pasado entre la fecha actual y la fecha en que se registró el sistema.

Si por ejemplo el producto fue registrado el 01 de enero del 2009, esta consulta arrojaría el numero de dias trascurridos desde esa fecha hasta hoy.

Código MySQL:
Ver original
  1. mysql> select datediff(curdate(),str_to_date('01/01/2009','%d/%m/%Y')) dias_transcurridos
  2. +--------------------+
  3. | dias_transcurridos |
  4. +--------------------+
  5. |                459 |
  6. +--------------------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql>

Ya con este numero, puedes validar con cuantos dias debe expirar el software y permitir listar el contenido de tu tabla.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 05/04/2010, 15:03
 
Fecha de Ingreso: octubre-2009
Mensajes: 125
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Duda con la funcion datediff

muchas gracias huesos52

me sirvió mucho tu ayuda

Etiquetas: datediff, funcion
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 02:20.