gpt4 book ai didi

sql - 在 sql 中按 IS NOT NULL AND 过滤

转载 作者:行者123 更新时间:2023-12-02 05:28:14 27 4
gpt4 key购买 nike

我有两个几乎相同的记录。一个包含“请求 ID”的空值,另一个不包含。我想过滤掉该列没有空值的数据,但我也希望根据关键字过滤掉数据。

Ex:
Search: ProjectName or Originator

Result: 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 .您应该将 ANDOR 语句分组:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com