从列等于值或为空的情况下选择(Mssql)
Selecting from where column equals a value or is null with cases (Mssql)
在下面的查询中,我正在搜索名为 welds 的 table,此 table 有一个名为 Welds.Prefix 的列,其中包含 NULL 行、具有实际值的行和行具有空值。我需要帮助修改下面的查询,以便当用户在 @Prefix 中输入非 null 和非空值时,它将找到匹配的行。当@Prefix 为空时,它会发现 Welds.Prefix 为空或 Welds.Prefix 为空但我不确定如何去做,我知道我可以进行更新查询并更改列空值到空格,但我正在寻找另一种方式。我 运行 下面的查询出现错误 "Incorrect syntax near the keyword 'OR'" 我明白为什么我会收到错误但我不确定如何修复它,谢谢。
注意:@Prefix会在前端输入,不会只绑定'',我只是为了提问才放在query里面的。
@Prefix varchar(30) = ''
select *
from welds
WHERE Welds.Prefix = CASE WHEN @Prefix <> '' THEN @Prefix END
OR Welds.Prefix = CASE WHEN @Prefix = '' THEN '' OR IS NULL END
编辑:
我基本上想选择 Weld.Prefix 为 null 和 Weld.Prefix = ' ' 当 @Prefix = ' '
的行
我想这就是你想要的逻辑:
SELECT *
FROM welds
WHERE Welds.Prefix = @sPrefix OR
(@sPrefix = '' AND NULLIF(Welds.Prefix, '') IS NULL)
你可以试试这个
DECLARE @Prefix VARCHAR(30) = ''
SELECT *
FROM welds
WHERE (ISNULL(@Prefix, '') = '')
OR (
ISNULL(@Prefix, '') <> ''
AND ISNULL(Welds.Prefix, '') = @Prefix
)
我刚刚遇到了一个几乎相同的问题并使用类似这样的方法解决了:
DECLARE @Prefix VARCHAR(30) = '';
SELECT *
FROM Welds
WHERE (Welds.Prefix IS NULL AND @Prefix = '')
OR (Welds.Prefix = ISNULL(NULLIF(@Prefix, ''), Welds.Prefix));
在下面的查询中,我正在搜索名为 welds 的 table,此 table 有一个名为 Welds.Prefix 的列,其中包含 NULL 行、具有实际值的行和行具有空值。我需要帮助修改下面的查询,以便当用户在 @Prefix 中输入非 null 和非空值时,它将找到匹配的行。当@Prefix 为空时,它会发现 Welds.Prefix 为空或 Welds.Prefix 为空但我不确定如何去做,我知道我可以进行更新查询并更改列空值到空格,但我正在寻找另一种方式。我 运行 下面的查询出现错误 "Incorrect syntax near the keyword 'OR'" 我明白为什么我会收到错误但我不确定如何修复它,谢谢。
注意:@Prefix会在前端输入,不会只绑定'',我只是为了提问才放在query里面的。
@Prefix varchar(30) = ''
select *
from welds
WHERE Welds.Prefix = CASE WHEN @Prefix <> '' THEN @Prefix END
OR Welds.Prefix = CASE WHEN @Prefix = '' THEN '' OR IS NULL END
编辑: 我基本上想选择 Weld.Prefix 为 null 和 Weld.Prefix = ' ' 当 @Prefix = ' '
的行我想这就是你想要的逻辑:
SELECT *
FROM welds
WHERE Welds.Prefix = @sPrefix OR
(@sPrefix = '' AND NULLIF(Welds.Prefix, '') IS NULL)
你可以试试这个
DECLARE @Prefix VARCHAR(30) = ''
SELECT *
FROM welds
WHERE (ISNULL(@Prefix, '') = '')
OR (
ISNULL(@Prefix, '') <> ''
AND ISNULL(Welds.Prefix, '') = @Prefix
)
我刚刚遇到了一个几乎相同的问题并使用类似这样的方法解决了:
DECLARE @Prefix VARCHAR(30) = '';
SELECT *
FROM Welds
WHERE (Welds.Prefix IS NULL AND @Prefix = '')
OR (Welds.Prefix = ISNULL(NULLIF(@Prefix, ''), Welds.Prefix));