从单个表中检查field1和field2

时间:2010-01-20 08:07:10

标签: sql

在SQL中:           我想检查一下。从单表,

 if(field1 = 1 and DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= field2) then
        return count(*)
     else
        return "false"

感谢 v.srinath

2 个答案:

答案 0 :(得分:0)

SELECT CASE WHEN (field1 = 1 AND DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= field2) 
                THEN   COUNT(*)     
       ELSE 0 
       END  
FROM SomeTable

答案 1 :(得分:0)

CASE  
    WHEN field1 = 1
    AND  DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= field2
    THEN COUNT(*)
    ELSE 'false'
END

请注意,这仅适用于SELECT列表或HAVING子句,并且您应该在field1和field2上有GROUP BY子句。原因是COUNT()是一个聚合函数。由于field1field2出现在aggregatee函数之外,因此必须使用GROUP BY子句强制执行这些字段的聚合。大多数RDBMS-es都不允许你写这个,除非有一个适当的GROUP BY子句,但是MySQL将会默默地为那些字段返回垃圾。

BTW - 我认为你可能不应该写"false"而只是写FALSE - 现在选择的两条腿都有不同的类型(布尔与字符串)。 db可能会强制类型,但它仍然是不好的做法。您应该确保CASE表达式的每个brach的表达式具有相同的数据类型。