ORA-01797: this operator must be followed by ANY or ALL

今天写sql时报了一个ORA-01797: this operator must be followed by ANY or ALL的错

中文的意思是  : 这个操作符必须遵循的任何或所有

说明我sql拼错了,是两个日期之间的界限问题,开始日期与结束日期之间:

ORA-01797: this operator must be followed by ANY or ALL_第1张图片

报错之前的代码是这样


        SELECT  *  FROM AMS_SALE_PRICE  WHERE 
        ((START_DATE>= TO_DATE('2014-1-1','yyyy-MM-dd') AND START_DATE <=('2014-1-31','yyyy-MM-dd')OR
              (END_DATE >= TO_DATE('2014-1-1','yyyy-MM-dd') AND END_DATE  <=('2014-1-31','yyyy-MM-dd') OR
              (TO_DATE('2014-1-1','yyyy-MM-dd') >= START_DATE AND ('2014-1-31','yyyy-MM-dd')<= END_DATE) OR
              ( TO_DATE('2014-1-31','yyyy-MM-dd') >= START_DATE AND ('2014-1-31','yyyy-MM-dd')  <= END_DATE))


低级错误啊!!!!

改正以后是:

            SELECT  *  FROM AMS_SALE_PRICE  WHERE 

            ((START_DATE >= TO_DATE('2014-1-1','yyyy-MM-dd') AND START_DATE <= TO_DATE('2014-1-31','yyyy-MM-dd')) OR
              (END_DATE >= TO_DATE('2014-1-1','yyyy-MM-dd') AND END_DATE <= TO_DATE('2014-1-31','yyyy-MM-dd')) OR
              (TO_DATE('2014-1-1','yyyy-MM-dd')>= START_DATE AND TO_DATE('2014-1-31','yyyy-MM-dd') <=TO_DATE('2014-1-31','yyyy-MM-dd')) OR
              (TO_DATE('2014-1-31','yyyy-MM-dd')>= START_DATE AND TO_DATE('2014-1-31','yyyy-MM-dd') <= END_DATE))
              
          

给大家提供一个有用的sql,这条sql还可以优化下,求各位大神指点!


SELECT * FROM AMS_SALE_PRICE
        WHERE ((START_DATE >= #beginDate# AND START_DATE <= #endDate#) OR
              (END_DATE >= #beginDate# AND END_DATE <= #endDate#) OR
              (#beginDate# >= START_DATE AND #endDate# <= END_DATE) OR
              (#endDate# >= START_DATE AND #endDate# <= END_DATE))
            AND SALE_ID = #saleId#



你可能感兴趣的:(DB)