首页 > 解决方案 > 在“Case When”中使用“AND”时从数据库中检索数据时出错

问题描述

我在“Case When”中使用“AND”时从数据库中检索数据时出错我试图仅检索“Open”日期大于“当前日期 +10 天”且项目状态应为“未关闭”,我在“Case when”中使用了“and”,但它仍然显示未关闭和关闭状态。任何帮助将不胜感激

SELECT
    Open,
    `TE Due Date`,
    `Certifier Due Date`,
    Close,
    ProjectStatus,
    case when ((DATE_ADD(Open, INTERVAL 10 DAY) > CURDATE()) and (ProjectStatus="Not Closed")) then "10 days passed from open date" else "" END AS "Open Status"
FROM 
    TCB
where DATE_ADD(Open, INTERVAL 10 DAY) > CURDATE() 
order by Open

标签: mysql

解决方案


您的病情与您对病情的描述不符;您说您想要“开放日期大于当前日期 +10 天,但DATE_ADD(Open, INTERVAL 10 DAY) > CURDATE()“大于当前日期减去 10 天”。

改为使用Open > DATE_ADD(CURDATE(), INTERVAL 10 DAY);它不仅反映了您提出的条件,而且还应该更快,因为它对不随行变化的值进行操作(即 DATE_ADD 应该只为每次查询执行计算一次)。

编辑:但是,从“从开放日期过去 10 天”来看,这可能是您需要的实际条件Open < DATE_SUB(CURDATE(), INTERVAL 10 DAY)

您的原始条件实际上意味着“在过去十天内打开”。


推荐阅读