作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个几乎相同的记录。一个包含“请求 ID”的空值,另一个不包含。我想过滤掉该列没有空值的数据,但我也希望根据关键字过滤掉数据。
Ex:
Search: ProjectName or OriginatorResult: get the entry without the null "Request ID" value back
搜索 ProjectName 可以得到我需要的东西,但搜索 Originator 仍然可以得到这两个结果?
这是我目前所拥有的:
USE [ResourceRequest]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[search_project_bykeyword]
(@ProjectName varchar(100)=NULL
,@Originator varchar(100)=NULL)
AS
SELECT *
FROM [dbo].[Resource_Request]
WHERE [Request ID] IS NOT NULL
AND
[Project Name] LIKE @ProjectName + '%'
OR [Originator] LIKE @Originator + '%'
最佳答案
AND
takes precedence over OR
.您应该将 AND
和 OR
语句分组:
SELECT *
FROM [dbo].[Resource_Request]
WHERE [Request ID] IS NOT NULL
AND
(
[Project Name] LIKE @ProjectName + '%'
OR [Originator] LIKE @Originator + '%'
)
之所以分组,是因为上面提到的先后顺序。这个顺序是:
Level Operators
1 ~ (Bitwise NOT)
2 * (Multiply), / (Division), % (Modulo)
3 + (Positive), - (Negative), + (Add), (+ Concatenate), - (Subtract), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR)
4 =, >, <, >=, <=, <>, !=, !>, !< (Comparison operators)
5 NOT
6 AND
7 ALL, ANY, BETWEEN, IN, LIKE, OR, SOME
8 = (Assignment)
这意味着,您所有的 AND
语句都将首先被评估。在它们全部被求值后,然后你的OR
语句被求值。
这使您的查询在编译器看来更像这样:
WHERE
(
[Request ID] IS NOT NULL
AND [Project Name] LIKE @ProjectName + '%'
)
OR [Originator] LIKE @Originator + '%'
这不是您要查找的子句。
通过将 WHERE
子句的 [Project Name]
和 [Originator]
段分组,您告诉编译器这两个应该作为一个集合进行评估,并在该集合和 [Request ID]
部分之间使用 AND
使其保持相同的优先级。
关于sql - 在 sql 中按 IS NOT NULL AND 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38272976/
我是一名优秀的程序员,十分优秀!