sql - 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
解决方案
我猜你想要:
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的优先规则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
在结果中看到。
推荐阅读
- swift - 无法转换“结果”类型的值' 关闭结果类型 'Result
' - ruby-on-rails - 在rails的数据库中保存表单数据(文本字段)
- perl - 使用perl读取电子表格中的时间格式数据
- java - 如何发送数组列表
到片段适配器 - javascript - ? 前面的令牌是不可量化的
- mysql - FORMAT 函数不适用于列中的所有数字?
- android - 防止在 Airwatch 托管设备上进行 android 应用逆向工程
- php - 如何仅显示未应用的类别?
- google-apps-script - 谷歌表格 - 如何从这个网站获取货币信息
- python - 在 bash 脚本中激活 python 虚拟环境失败并显示“sudo: source: command not found”