MySQL: сравнение ПУСТОЙ даты к CURRENT_DATE

У меня есть таблица MYSQL с новостными статьями с полями "date_start" и "date_end" для указания который новости показать на веб-сайте. Статьи общедоступны, если date_start, прежде сегодня и date_end уже не прошел (после сегодня).

Проблема: я хотел бы позволить администратору оставить date_end ПУСТОЙ УКАЗАТЕЛЬ, если статья имеет постоянный характер и не истекает. Это, конечно, не работает с моим выбором:

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

Это не учитывает статьи с a NULL date_end. Я пытался играть немного с операторами IF, но это стало сбивающим с толку меня. Есть ли простой способ сделать это, или если я просто установил date_end на 3000-01-01 если это оставило пустым?:)

9
задан KhAn SaAb 28 April 2014 в 17:09
поделиться

4 ответа

Из того, что я получил ваш вопрос, вы хотите, чтобы одна из этих

A] date_end была больше текущей даты или если она пуста

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

B] date_end должна присутствовать и быть больше текущей даты

SELECT * FROM pf_news 
         WHERE date_start <= CURRENT_DATE() AND
               date_end >= CURRENT_DATE()   AND 
               date_end IS NOT NULL
1
ответ дан 4 December 2019 в 08:32
поделиться

Вы можете попробовать:

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

или другую подобную логическую группировку.

21
ответ дан 4 December 2019 в 08:32
поделиться

Ваше последнее предложение звучит правильно. Вы можете использовать функцию IFNULL. Она имеет два аргумента. Если первый аргумент не является null, она возвращает первый аргумент. Второй аргумент - это то, что нужно вернуть, если первый аргумент равен null. Поэтому в своем операторе вы можете сказать следующее:

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

Это также можно использовать в SQL Server, но там это называется функцией "ISNULL".

Просто установите себе напоминание в календаре на 12/31/2999, чтобы изменить свой код! :)

3
ответ дан 4 December 2019 в 08:32
поделиться

или попробуйте

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

0, кажется, мне подходит

0
ответ дан 4 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: