MySQL使用BETWEEN与NULL进行比较

Hei*_*erg 5 mysql null between

我有一个查询,其中where条件如下:

WHERE A.event_date BETWEEN B.start_date AND B.end_date
Run Code Online (Sandbox Code Playgroud)

复杂性是,如果B.start_date是NULL,则意味着从远古时代开始,同样B.end_date是NULL,它意味着现在.所以,我还是要选择一排,其中A.event_date > B.start_dateB.end_dateNULL,例如.

这种冗长的方式是

WHERE A.event_date BETWEEN B.start_date AND B.end_date
   OR (A.event_date > B.start_date AND B.end_date IS NULL)
   OR (B.start_date IS NULL AND A.event_date < B.end_date)
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的解决方案(特别是因为在一个查询中我有多个这样的条件)

Tom*_*Mac 7

IFNULL 可能会有帮助:

WHERE A.event_date BETWEEN IFNULL(B.start_date,"1900-01-01") 
                   AND IFNULL(B.end_date,now());
Run Code Online (Sandbox Code Playgroud)


小智 5

COALESCE()函数将返回参数列表中的第一个非空值。试试看:

WHERE A.event_date BETWEEN COALESCE(B.start_date,'1900-01-01') and COALESCE(B.end_date,CURRENT_TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)