评估和内部和SQL

时间:2019-03-14 20:20:45

标签: sql sql-server

我如何让SQL将其评估为2和语句而不是4?左侧和镜头应一起评估。

where LEFT([KeyCode],8) <> 'BOS09864'and len([keycode])>8 
and LEFT([KEYCODE],8) <> 'BOS04450'and len([keycode])>8
and [keycode] not in ('STDFJ927','STDFJ928','STDFJ960','STDFJ928NX') 

2 个答案:

答案 0 :(得分:5)

通过使用NOT IN

SELECT *
FROM YourTable
WHERE LEN([KeyCode])>8
  AND LEFT([KeyCode],8) NOT IN ('BOS09864', 'BOS04450')
  AND [KeyCode] NOT IN ('STDFJ927','STDFJ928','STDFJ960','STDFJ928NX')

但是,如果您还想检索小于或等于8的那些,请尝试不要在括号内使用LEN和IN条件。

SELECT *
FROM YourTable
WHERE NOT (LEN([KeyCode])>8 AND LEFT([KeyCode],8) IN ('BOS09864', 'BOS04450'))
  AND [KeyCode] NOT IN ('STDFJ927','STDFJ928','STDFJ960','STDFJ928NX')

使用2个不喜欢的字符加上下划线将得到与上一个查询相同的结果。
如果KeyCode上有索引,这可能会更快。
但是,当您想拒绝更多这些按键代码时,这是一个糟糕的高尔夫球代码。

SELECT *
FROM YourTable
WHERE [KeyCode] NOT LIKE 'BOS09864_%'
  AND [KeyCode] NOT LIKE 'BOS04450_%'
  AND [KeyCode] NOT IN ('STDFJ927','STDFJ928','STDFJ960','STDFJ928NX')

答案 1 :(得分:0)

如果您要从结果中排除同一列中的多个值,则可以使用NOT IN列出它们:

LEFT([KEYCODE],8) NOT IN ('BOS09864','BOS04450')