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

私の質問:年齢 > 10の場合にのみ、2 番目の条件enddate>'31-05-2013'が必要です

このクエリの何が問題になっていますか?

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

間違っている可能性があることがいくつかあります。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 に答える