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

between con like

Estas en el tema de between con like en el foro de Mysql en Foros del Web. hola quisiera saber si se puede hacer esto esto intentando realizar un between pero tambien necesito poner un like y nose si se pueda hacer ...
  #1 (permalink)  
Antiguo 13/09/2011, 10:27
 
Fecha de Ingreso: mayo-2011
Mensajes: 55
Antigüedad: 12 años, 10 meses
Puntos: 1
between con like

hola quisiera saber si se puede hacer esto
esto intentando realizar un between pero tambien necesito poner un like y
nose si se pueda hacer todo junto ejemplo:

Código PHP:
$Buscar mysql_query("select TipoServ, CAT, carrier, ldn, ldi, ldm, renta, sm, mpaqinf, Total, substring(fecha, 1, 7) as Fecha from historicC where DATE(fecha) between '" .$_POST['Date1']. "%' and '" .$_POST['Date2']. "%'"); 
obviamente esto me da un error por que los "%" me imagino que solo se pueden
usar con like y al poner el like tambien me marca error mi pregunta como puedo hacer esto de otra manera?

Código PHP:
$Buscar mysql_query("select TipoServ, CAT, carrier, ldn, ldi, ldm, renta, sm, mpaqinf, Total, substring(fecha, 1, 7) as Fecha from historicC where DATE(fecha) between  like '" .$_POST['Date1']. "%' and like '" .$_POST['Date2']. "%'"); 
  #2 (permalink)  
Antiguo 13/09/2011, 10:31
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: between con like

Saludos!

Por que lo quieres manejarlo con like?. Que datos de entrada podrías tener?.
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 13/09/2011, 10:35
 
Fecha de Ingreso: mayo-2011
Mensajes: 55
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: between con like

mira por ejemplo date1 y date2 obviamente son fechas pero ese campo contiene año, mes y hora y le pongo el like para q de ese campo solo agarre los primeros 7 digitos que son mes y año por ejemplo buscame todos lo que se registro durante el 2011-09 y 2011-12 masomenos esto es lo que quiero hacer No si se me explique bien :S
  #4 (permalink)  
Antiguo 13/09/2011, 10:57
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: between con like

Saludos

Te entiendo, pero para ello podrías formatear la fecha ya sea desde php o con mysql como lo haces en tu segundo ejemplo con la funcion DATE

Código MySQL:
Ver original
  1. DATE(fecha) between  'DATE(fecha1)' and 'DATE(fecha2)'
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #5 (permalink)  
Antiguo 13/09/2011, 11:10
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: between con like

Hola bon3:

Complementando el comentario de Nano_, podrías también hacer una comparación por partes, es decir comparando solo el año y el mes, para no tener que involucrar a los días ni las horas, checa este script:

Código MySQL:
Ver original
  1. mysql> create table fechas (fecha datetime);
  2. Query OK, 0 rows affected (0.31 sec)
  3.  
  4. mysql> insert into fechas values ('2011-08-31'), ('2011-09-01 00:00:01'),
  5.     -> ('2011-11-30 23:59:59'),('2011-12-31 23:59:59'),('2012-01-01 00:00:01');
  6. Query OK, 5 rows affected (0.08 sec)
  7. Records: 5  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select * from fechas;
  10. +---------------------+
  11. | fecha               |
  12. +---------------------+
  13. | 2011-08-31 00:00:00 |
  14. | 2011-09-01 00:00:01 |
  15. | 2011-11-30 23:59:59 |
  16. | 2011-12-31 23:59:59 |
  17. | 2012-01-01 00:00:01 |
  18. +---------------------+
  19. 5 rows in set (0.07 sec)
  20.  
  21. mysql> select * from fechas where year(fecha) = 2011 and
  22.     -> month(fecha) between 9 and 12;
  23. +---------------------+
  24. | fecha               |
  25. +---------------------+
  26. | 2011-09-01 00:00:01 |
  27. | 2011-11-30 23:59:59 |
  28. | 2011-12-31 23:59:59 |
  29. +---------------------+
  30. 3 rows in set (0.07 sec)

observa que la ultima consulta te regresa todos los registros comprendidos entre el primer instante del día 9 de septiembre de 2011 hasta el último segundo del día 12 de Diciembre de 2011.

Dale una revisada a todas las Funciones de Fecha y Hora que proporciona MySQL, como te darás cuenta con bastantes y te podrán servir en un futuro.

Saludos
Leo.
  #6 (permalink)  
Antiguo 13/09/2011, 11:21
 
Fecha de Ingreso: mayo-2011
Mensajes: 55
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: between con like

Cita:
Iniciado por leonardo_josue Ver Mensaje
Código MySQL:
Ver original
  1. mysql> create table fechas (fecha datetime);
  2. Query OK, 0 rows affected (0.31 sec)
  3.  
  4. mysql> insert into fechas values ('2011-08-31'), ('2011-09-01 00:00:01'),
  5.     -> ('2011-11-30 23:59:59'),('2011-12-31 23:59:59'),('2012-01-01 00:00:01');
  6. Query OK, 5 rows affected (0.08 sec)
  7. Records: 5  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select * from fechas;
  10. +---------------------+
  11. | fecha               |
  12. +---------------------+
  13. | 2011-08-31 00:00:00 |
  14. | 2011-09-01 00:00:01 |
  15. | 2011-11-30 23:59:59 |
  16. | 2011-12-31 23:59:59 |
  17. | 2012-01-01 00:00:01 |
  18. +---------------------+
  19. 5 rows in set (0.07 sec)
  20.  
  21. mysql> select * from fechas where year(fecha) = 2011 and
  22.     -> month(fecha) between 9 and 12;
  23. +---------------------+
  24. | fecha               |
  25. +---------------------+
  26. | 2011-09-01 00:00:01 |
  27. | 2011-11-30 23:59:59 |
  28. | 2011-12-31 23:59:59 |
  29. +---------------------+
  30. 3 rows in set (0.07 sec)
Excelente muchas gracias Leo me diste otra idea de como hacerlo un saludo y de nuevo gracias :D

Etiquetas: query, select, sql
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 21:40.