如何在 where 子句中使用 NULLIF?
How can you use NULLIF in the where clause?
我正在尝试做这样的事情:
select
col_1, col_2, etc
from
table
where
col_1 = nullif('', '')
我做错了吗?我没有得到任何结果。
编辑:
我的预期结果是取回 col_1 为 NULL 的每条记录。
我知道我可以在 col_1 为空的地方使用,但我使用的是 SSIS 和一个变量。有时 col_1 实际上是 NULL,有时不是。
示例数据:
collaboration first_name last_name city
NULL Bob Smith Chicago
Data Migration John Smith Austin
NULL Pika Chu Houston
Production ash ketchum tokyo
有时我可能想要 return 协作为 NULL 的记录,有时我想要 return 显示生产的记录。
我想使用相同的查询,如果可能的话,稍作修改。
编辑第 2 部分:
我试着用这个做实验。
select
col_1, col_2, etc
from
table
where
case
when col_1 = '' then NULL
else col_1
end
但我收到错误消息:
An expression of non-boolean type specified in a context where a condition is expected, near ORDER.
查询速度不是我关心的。
这是您需要的查询
select
col_1, col_2, etc
from
table
where
col_1 is null
is null
检查列是否为空,nullif(@expr1,@expr2)
可以重写为:
case when @expr1 = @expr2 return null else return @expr1 end
编辑:
您可以放宽过滤器,将 OR
条件添加到 'where' 子句中(提示:记住 AND
在 OR
之前计算)
select
col_1, col_2, etc
from
table
where
(col_1 is null OR col1 like 'production')
如果你想决定你需要的运行时间,你可以写一个过程:
create proc my_proc @var AS varchar(100) = 'NULL§159§' -- this defaults to null, if you put a parameter it queries with parameter passed
as
select
col_1, col_2, etc
from
table
where
WHERE coalesce(col_1,'NULL§159§') = @var
-- added §159§ symbol to the null to make sure the queried string is impossible in the database,
-- obviously into the database the value 'NULL159' hase become a sort of 'reserved word', but hopefully is odd enough not to appear in data
GO
然后用exec my_proc('production')
调用
你可以做类似
select
col_1, col_2, etc
from
table
where
col_1 IS NULL OR col_1 = ''
试试这个,它可以处理空值或空的列 space
SELECT
col_1, col_2, etc
FROM
Table
WHERE
ISNULL(NULLIF(col_1 ,''),'1') = '1'
select
col_1, col_2, etc
from
table
where
collaboration IS NULL OR collaboration ='Production'
Crystal 我的球时间。这是我对 OP 想要什么的猜测:
DECLARE @Prod varchar(15);
--SET @Prod = 'Production';
SELECT {Columns}
FROM YourTable
WHERE Col1 = @Prod
OR (Col1 IS NULL AND @Prod IS NULL);
试试这个。
DECLARE @SearchValue VARCHAR(50)
SELECT col_1, col_2, etc
FROM YourTable
WHERE ISNULL(col_1,'') = ISNULL(@SearchValue,'')
我正在尝试做这样的事情:
select
col_1, col_2, etc
from
table
where
col_1 = nullif('', '')
我做错了吗?我没有得到任何结果。
编辑:
我的预期结果是取回 col_1 为 NULL 的每条记录。
我知道我可以在 col_1 为空的地方使用,但我使用的是 SSIS 和一个变量。有时 col_1 实际上是 NULL,有时不是。
示例数据:
collaboration first_name last_name city
NULL Bob Smith Chicago
Data Migration John Smith Austin
NULL Pika Chu Houston
Production ash ketchum tokyo
有时我可能想要 return 协作为 NULL 的记录,有时我想要 return 显示生产的记录。
我想使用相同的查询,如果可能的话,稍作修改。
编辑第 2 部分:
我试着用这个做实验。
select
col_1, col_2, etc
from
table
where
case
when col_1 = '' then NULL
else col_1
end
但我收到错误消息:
An expression of non-boolean type specified in a context where a condition is expected, near ORDER.
查询速度不是我关心的。
这是您需要的查询
select
col_1, col_2, etc
from
table
where
col_1 is null
is null
检查列是否为空,nullif(@expr1,@expr2)
可以重写为:
case when @expr1 = @expr2 return null else return @expr1 end
编辑:
您可以放宽过滤器,将 OR
条件添加到 'where' 子句中(提示:记住 AND
在 OR
之前计算)
select
col_1, col_2, etc
from
table
where
(col_1 is null OR col1 like 'production')
如果你想决定你需要的运行时间,你可以写一个过程:
create proc my_proc @var AS varchar(100) = 'NULL§159§' -- this defaults to null, if you put a parameter it queries with parameter passed
as
select
col_1, col_2, etc
from
table
where
WHERE coalesce(col_1,'NULL§159§') = @var
-- added §159§ symbol to the null to make sure the queried string is impossible in the database,
-- obviously into the database the value 'NULL159' hase become a sort of 'reserved word', but hopefully is odd enough not to appear in data
GO
然后用exec my_proc('production')
你可以做类似
select
col_1, col_2, etc
from
table
where
col_1 IS NULL OR col_1 = ''
试试这个,它可以处理空值或空的列 space
SELECT
col_1, col_2, etc
FROM
Table
WHERE
ISNULL(NULLIF(col_1 ,''),'1') = '1'
select
col_1, col_2, etc
from
table
where
collaboration IS NULL OR collaboration ='Production'
Crystal 我的球时间。这是我对 OP 想要什么的猜测:
DECLARE @Prod varchar(15);
--SET @Prod = 'Production';
SELECT {Columns}
FROM YourTable
WHERE Col1 = @Prod
OR (Col1 IS NULL AND @Prod IS NULL);
试试这个。
DECLARE @SearchValue VARCHAR(50)
SELECT col_1, col_2, etc
FROM YourTable
WHERE ISNULL(col_1,'') = ISNULL(@SearchValue,'')