2010-06-30 21 views
6

Tengo una tabla MYSQL con artículos de noticias con los campos "date_start" y "date_end" para indicar qué noticias mostrar en un sitio web. Los artículos son públicos si date_start es anterior a hoy y el date_end aún no se ha ido (después de hoy).MYSQL: comparar una fecha NULL con CURRENT_DATE

El problema: Me gustaría dejar que el administrador deje date_end NULL si el artículo es de carácter permanente y no caduca. Por supuesto, esto no funciona con mi selecto:

SELECT * FROM pf_news WHERE date_start <= CURRENT_DATE() AND date_end >= CURRENT_DATE() 

Deja fuera artículos con un NULL date_end. Intenté jugar un poco con las declaraciones IF pero me resultó confuso. ¿Hay una manera simple de hacerlo, o debería simplemente poner date_end en 3000-01-01 si se deja vacío? :)

Respuesta

1

Por lo poco que consiguiera su pregunta que quiero uno de este

A] DATE_END más de la fecha actual o si es nulo

SELECT * FROM pf_news 
     WHERE date_start <= CURRENT_DATE() AND (date_end >= CURRENT_DATE() OR date_end is nil) 

B] DATE_END deben estar presentes y más de fecha actual

SELECT * FROM pf_news 
     WHERE date_start <= CURRENT_DATE() AND 
       date_end >= CURRENT_DATE() AND 
       date_end is not nil 
19

usted podría intentar:

SELECT * FROM pf_news WHERE date_start <= CURRENT_DATE() AND 
(date_end >= CURRENT_DATE() OR date_end IS NULL) 

o alguna agrupación lógica similar.

+0

Gracias chicos por las respuestas increíblemente rápidas! Este hace absolutamente lo que estaba buscando. Finalmente fue bastante fácil :) – Ville

+0

:) Me alegra ser de ayuda. –

+0

¡Voto a favor de una gran justicia! – SoonDead

0

o tratar

SELECT * FROM pf_news WHERE date_start <= now() AND (date_end >= now() OR date_end = 0) 

0 parece funcionar bien para mí

1

suena correcta Su última propuesta. Puedes usar la función IFNULL. Tiene dos argumentos. Si el primer argumento no es nulo, devuelve el primer argumento. El segundo argumento es qué devolver si el primer argumento es nulo. Así que en su estado de cuenta, se puede decir lo siguiente:

SELECT * FROM pf_news WHERE date_start <= CURRENT_DATE() AND IFNULL(date_end, '3000-01-01') >= CURRENT_DATE() 

Esto también se puede utilizar en SQL Server, pero lo llaman la función "ISNULL".

¡Solo tiene que configurar un recordatorio de calendario para usted el 31/12/2999 para cambiar su código! :)

+0

Me di cuenta de que este es un hack ya que mostraría al administrador del sitio la fecha 3000-01-01 en el formulario de edición :) – Ville

+0

Como la instrucción IFNULL está solo en la cláusula WHERE en lugar de la cláusula SELECT, entonces la '3000-01-01' no se debe devolver como resultado de una consulta. Al menos, esto funcionó bien para mí en el pasado. – brentlightsey

Cuestiones relacionadas