访问 2013 SQL: "IS NOT LIKE"问题



我无法弄清楚为什么我的子句似乎仍然返回值为" spec"的列值...我在这里做错了什么?[H1姓氏]是唯一包含此名称/值的列。

SELECT [H1 LAST Name] & ", " & [H1 FIRST Name] AS [FULL Name],
       [H1 E-Mail] AS [E-Mail],
       IIF([H1 Cell Phone] IS NULL, [Home Phone], [H1 Cell Phone]) AS Phone
FROM   NameLookup
WHERE  ((NameLookup.[H1 LAST Name] NOT LIKE '%SPEC%') OR (NameLookup.[H1 LAST Name] NOT LIKE '%MODEL%'))
  AND  (NameLookup.[H1 LAST Name] IS NOT NULL)
UNION ALL
SELECT [H2 LAST Name] & ", " & [H2 FIRST Name] AS [FULL Name],
       [H2 E-Mail] AS [E-Mail],
       IIF([H2 Cell Phone] IS NULL, [Home Phone], [H2 Cell Phone]) AS Phone
FROM   NameLookup
WHERE  ((NameLookup.[H1 LAST Name] NOT LIKE '%SPEC%') OR (NameLookup.[H1 LAST Name] NOT LIKE '%MODEL%'))
  AND  (NameLookup.[H2 LAST Name] IS NOT NULL)
ORDER BY [FULL NAME]

您的查询接受记录

(NameLookup.[H1 LAST Name] NOT LIKE '%SPEC%') OR (NameLookup.[H1 LAST Name] NOT LIKE '%MODEL%')

因此,如果姓氏不包含"模型",但确实包含"规格",则将其变成您的结果。

LIKE的通配符字符不同,具体取决于查询运行的上下文。

来自ADO,通配符是%_

NameLookup.[H1 LAST Name] NOT LIKE '%SPEC%'

来自DAO,通配符为*?

NameLookup.[H1 LAST Name] NOT LIKE '*SPEC*'

或者您可以使用ALIKE而不是LIKE,然后DB引擎将始终期望%_通用卡,而不管查询运行的上下文如何:

NameLookup.[H1 LAST Name] NOT ALIKE '%SPEC%'

最新更新