Я предполагаю, что вы хотите:
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
и OR
.AND
имеет более высокий приоритет, поэтому:
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
в результатах.