首页 > 解决方案 > SQL 中括号的规则。似乎没有工作

问题描述

SQL 新手。“Like '%”和“not like '%”语句返回不正确的值时遇到问题。我认为是括号。当我使用以下内容时,即使我选择了它们,我仍然会看到“YMCA”和“United Way”。我尝试将单个括号嵌套到一个大括号中,我尝试在每个语句周围放置单个括号。没有任何工作。这是代码。非常感谢任何建议!

SELECT TRANSACTION_DATE, MERCHANT_NAME 
FROM CardTrans 
WHERE 
   (
     (TRANSACTION_DATE BETWEEN '2018-03-01' AND  '2018-03-15') 
     OR 
     (    TRANSACTION_DATE IS NULL 
      AND POST_DATE BETWEEN '2018-03-01' AND '2018-03-15')
   ) 
AND (TRANSACTION_BASE_TYPE = 'debit') 
and  (DESCRIPTION LIKE '%SWAIR%') 
OR   (DESCRIPTION LIKE '%SW AIR%') 
OR   (DESCRIPTION LIKE '%SWA INFL%') 
OR   (DESCRIPTION LIKE '%*Southwest Air%') 
AND   DESCRIPTION NOT LIKE '%AMAZON%' 
AND   DESCRIPTION NOT LIKE '%AMZ%' 
AND   DESCRIPTION NOT LIKE '%YMCA OF SOUTHWES%' 
AND   DESCRIPTION NOT LIKE '%UNITED WAY OF SOUTHWES%' 
ORDER BY DESCRIPTION;
GO   

标签: sqlparentheses

解决方案


我猜你想要:

WHERE ( (TRANSACTION_DATE BETWEEN '2018-03-01' AND  '2018-03-15') OR 
        (TRANSACTION_DATE IS NULL AND POST_DATE BETWEEN '2018-03-01' AND '2018-03-15')
      ) AND
      TRANSACTION_BASE_TYPE = 'debit' AND  
      (DESCRIPTION LIKE '%SWAIR%' OR
       DESCRIPTION LIKE '%SW AIR%' OR
       DESCRIPTION LIKE '%SWA INFL%' OR 
       DESCRIPTION LIKE '%*Southwest Air%'
      ) AND
      DESCRIPTION NOT LIKE '%AMAZON%' AND 
      DESCRIPTION NOT LIKE '%AMZ%' AND 
      DESCRIPTION NOT LIKE '%YMCA OF SOUTHWES%' AND 
      DESCRIPTION NOT LIKE '%UNITED WAY OF SOUTHWES%' 

AND您的问题是理解and的优先规则ORAND具有更高的优先级,因此:

 DESCRIPTION LIKE '%SWA INFL%' OR 
 DESCRIPTION LIKE '%*Southwest Air%' AND
 DESCRIPTION NOT LIKE '%AMAZON%'

被解析为:

 DESCRIPTION LIKE '%SWA INFL%' OR 
 (DESCRIPTION LIKE '%*Southwest Air%' AND
  DESCRIPTION NOT LIKE '%AMAZON%'
 )

您可能会AMAZON在结果中看到。


推荐阅读