0

看看这个:

SELECT clientid,clientname,startdate,enddate,age FROM clients 
WHERE clientid IN (1,2,3,4,5)
AND CASE WHEN age>10 THEN enddate>'31-05-2013'
END

我的问题:我想要第二个条件enddate>'31-05-2013'只有当年龄 > 10

这个查询有什么问题?

4

5 回答 5

4
Select clientid,clientname,startdate,enddate,age from clients 
where clientid in (1,2,3,4,5)
and (age <= 10 OR enddate > '31-05-2013')
于 2012-07-05T06:24:58.940 回答
2

我不认为你可以使用这样的 case 表达式。试试这个:

Select clientid,clientname,startdate,enddate,age from clients 
where clientid in (1,2,3,4,5)
and (age<=10 or enddate>'31-05-2013')
于 2012-07-05T06:24:32.760 回答
1

有几件事可能是错误的。一是日期通常是2013-05-31有序的。这可能会根据区域设置而改变;让我们假设。

否则,您需要将查询更简单地编写为:

SELECT clientid, clientname, startdate, enddate, age
  FROM clients 
 WHERE clientid IN (1,2,3,4,5)
   AND ((age > 10 AND enddate > '31-05-2013') OR (age <= 10))

或者,使用案例:

SELECT clientid, clientname, startdate, enddate, age
  FROM clients 
 WHERE clientid IN (1,2,3,4,5)
   AND CASE 
       WHEN age > 10 THEN enddate > '31-05-2013'
       ELSE TRUE
       END

(没有 ELSE 子句的默认值为 NULL。)

于 2012-07-05T06:28:37.540 回答
0
Select clientid,clientname,startdate,enddate,age from clients
where clientid in (1,2,3,4,5)
and  ( (age>10 and enddate>'31-05-2013') or (age<=10 and enddate<='31-05-2013') )
于 2012-07-05T06:45:01.297 回答
0

我会使用明确的日期格式

Select clientid,clientname,startdate,enddate,age from clients  
where clientid in (1,2,3,4,5) 
and (age <= 10 OR enddate > '20130531') 

看到这个原因http://beyondrelational.com/modules/2/blogs/70/posts/10899/understanding-datetime-column-part-ii.aspx

于 2012-07-06T07:08:14.390 回答