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_date和B.end_date是NULL,例如.
这种冗长的方式是
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)
有没有更优雅的解决方案(特别是因为在一个查询中我有多个这样的条件)
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)