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

Duda con YEAR() y Where

Estas en el tema de Duda con YEAR() y Where en el foro de Mysql en Foros del Web. Hola, es correcto hacer lo siguiente: Código: SELECT * FROM usuario WHERE YEAR(fech_nac)<20 ¿Es correcto usar la función YEAR dentro de un WHERE?. Se que ...
  #1 (permalink)  
Antiguo 06/08/2007, 18:20
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 4 meses
Puntos: 8
Duda con YEAR() y Where

Hola, es correcto hacer lo siguiente:

Código:
SELECT * FROM usuario WHERE YEAR(fech_nac)<20
¿Es correcto usar la función YEAR dentro de un WHERE?.

Se que por lo general se usa en el Selec Expreción pero me surgió la duda si se puede usar en el WHERE.

Gracias y saludos.
  #2 (permalink)  
Antiguo 06/08/2007, 21:18
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Duda con YEAR() y Where

Si se puede utilizar, solo que debes tener presente que lo que te regresa es el año de esa fecha. Si lo que queres es realizar comparaciones para edad, por ejemplo, debes modificar tu SELECT de la siguiente forma:

Código PHP:
SELECT FROM usuario
WHERE 
(YEAR(CURRENT_DATE) - YEAR(fech_nac)) 
          - (
RIGHT(CURRENT_DATE,5) < RIGHT(fech_nac,5)) < 20 
Podes ver el ejemplo en este enlace: Cálculos con fechas
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 07/08/2007, 08:18
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 4 meses
Puntos: 8
Re: Duda con YEAR() y Where

muchas gracias BrujoNic
  #4 (permalink)  
Antiguo 07/08/2007, 15:14
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 4 meses
Puntos: 8
Re: Duda con YEAR() y Where

Hola tengo un problema con la siguiente consulta en mysql 4.1.22-standard,

Cita:
SELECT *
FROM user_datos_usuarios
WHERE YEAR( fecha_nacimiento ) >= '1979'
AND YEAR( fecha_nacimiento ) <= '1979'
LIMIT 0 , 30
No encuentra ningún registro y si los hay, sin embargo en mysql 5 funciona bien.

¿alguien sabe algo sobre esto?
  #5 (permalink)  
Antiguo 07/08/2007, 17:52
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Re: Duda con YEAR() y Where

¿Qué pasa si les quitas las comillas sencillas a 1979?

Aparte de eso. ¿Qué resultado va arrojarte con esa sentencia? eso solo te regresaría todo lo que esté en 1979, o sea, es más sencillo poner WHERE YEAR(fecha_nacimiento) = 1979
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #6 (permalink)  
Antiguo 07/08/2007, 18:54
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 4 meses
Puntos: 8
Re: Duda con YEAR() y Where

Hola, gracias por responder. Quitando las comillas sucede lo mismo, la idea es que busque por rango, 1979 como rango es solo un ejemplo.

Última edición por zsamer; 07/08/2007 a las 19:07
  #7 (permalink)  
Antiguo 07/08/2007, 20:10
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 4 meses
Puntos: 8
Re: Duda con YEAR() y Where

Al final siguiendo el consejo de BrujoNic lo hice por rango de edad:

Cita:
SELECT *
FROM user_datos_usuarios
WHERE (
(
YEAR( CURRENT_DATE ) - YEAR( fecha_nacimiento )
) - ( RIGHT( CURRENT_DATE, 5 ) < RIGHT( fecha_nacimiento, 5 ) )
) >= '28'
AND (
(
YEAR( CURRENT_DATE ) - YEAR( fecha_nacimiento )
) - ( RIGHT( CURRENT_DATE, 5 ) < RIGHT( fecha_nacimiento, 5 ) )
) <= '29'
LIMIT 0 , 30
Como busca por rango tengo que calcular la edad 2 veces:
¿cuál es el costo de rendimiento en el motor al hacer dos veces el calculo?
¿hay otra forma más eficiente?

gracias y saludos.
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 23:46.