0

我正在尝试做这样的事情:

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

有时我可能想返回协作为 NULL 的记录,有时我想返回显示为 Production 的记录。

如果可能的话,我想使用相同的查询,几乎不需要修改。

编辑第 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.

查询速度不是我关心的。

4

6 回答 6

3

这是您需要的查询

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')

于 2019-03-19T14:49:10.400 回答
2

试试这个,它可以处理空值或空格的列

SELECT
     col_1, col_2, etc
FROM
     Table
WHERE
     ISNULL(NULLIF(col_1 ,''),'1') = '1'
于 2019-03-19T14:54:48.487 回答
0

你可以做类似的事情

select
     col_1, col_2, etc
from
     table
where
     col_1 IS NULL OR col_1 = ''
于 2019-03-19T14:52:40.350 回答
0
select
     col_1, col_2, etc
from
     table
where
     collaboration IS NULL OR collaboration ='Production'
于 2019-03-19T14:57:56.390 回答
0

我的水晶球时间。这是我对 OP 想要什么的猜测:

DECLARE @Prod varchar(15);
--SET @Prod = 'Production';

SELECT {Columns}
FROM YourTable
WHERE Col1 = @Prod
   OR (Col1 IS NULL AND @Prod IS NULL);
于 2019-03-19T15:00:34.103 回答
0

试试这个。

DECLARE @SearchValue VARCHAR(50)
SELECT col_1, col_2, etc
FROM YourTable
WHERE ISNULL(col_1,'') = ISNULL(@SearchValue,'')
于 2019-03-19T15:26:01.047 回答