2017-05-10 80 views
0

当WHERE/AND子句不匹配时,我可以得到一些特定的错误消息吗?是否有可能知道哪个SQL WHERE子句不匹配?

例如是这样的:

SELECT foo 
FROM bar 
WHERE date >= CURRENT_DATE /* if date < current date -> ERROR 1 */ 
    AND name = 'John'   /* if name not equal 'John' -> ERROR 2*/ 

我使用的是Postgres数据库

+0

还不如一个说法?如果你需要这个级别的错误提升所有我建议的是,你把基于日期的第一个数据集放入临时表并检查行数。如果零引发错误1.如果不为零,则从temp表中为name = john选择并执行相同的操作。 – Wheels73

回答

0

使用case表情告诉你的每一行,如果它是有效还是无效。

SELECT foo, 
     case when date < CURRENT_DATE then 'ERROR 1' end, 
     case when date <> 'John' then 'ERROR 2' end 
FROM bar 
+0

所以我必须做更多的陈述?在这种情况下,它会选择整个数据集,对吧? –

+0

是的,这个查询将返回每一行。这不是你想要的吗? – jarlh

0

你可以这样做与CASE声明:

SELECT foo, 
    CASE WHEN date < current_date THEN 'ERROR 1' ELSE 'NO ERROR' END AS error_1, 
    CASE WHEN name != 'John' THEN 'ERROR 2' ELSE 'NO ERROR' END AS error_2 
FROM bar; 
+0

案例_expression_,而不是语句。 – jarlh

0

我可能会错过不便,但为什么每个人都提供了两列。为什么不

SELECT foo, 
    case 
    when date < CURRENT_DATE then 'ERROR 1' 
    when date <> 'John' then 'ERROR 2' 
    else 'OTHERS' 
    end 
FROM bar 
相关问题