2013-09-25 47 views
0

如何返回所有可能性,无论是否有内容或它是否为NULL?WHERE语句选择所有内容(内容和NULL)

如果我想回到一切不是NULL:

SELECT * FROM table WHERE column LIKE '%' 

如果我想返回空值都:

SELECT * FROM table WHERE column IS NULL 

如何合并他们两个?我需要能够,因为我参数化它。我的应用程序的前端将有多个选项ALL(任何内容或NULL)或特定值。

我该如何做到这一点?

编辑:

让我澄清更好。我有一个下拉列表,将显示类似这样

- 选择清一色 A队 B队 东西...

所以如果选择 - 选择清一色然后我需要查询返回空值的所有和那些与任何一支球队

如果A队选中,我需要只显示A队和没有空值等等......

我不能更改查询只是一个单一的变量(参数)

+2

嗯..所有*不要*使用任何标准? –

+0

以上只是一个例子。实际上,我正在处理一个长而复杂的查询,并且必须有一个参数,因为我将通过C#传递它。 –

回答

2

这很简单。只得到NULLS:

SELECT * FROM table 
WHERE column IS NULL 

只得到不NULLS:

SELECT * FROM table 
WHERE column IS NOT NULL 
-- could be this if your example is not representative 
-- WHERE column IS NULL OR column LIKE '%whatever%' 

而对于一切(无过滤器),只是做:

SELECT * FROM table 

进一步澄清:

在你的例子中,如果代码已经写好,你可以Ÿ通过在WHERE子句中,那么你可以这样做:

WHERE <insert here> 

column IS NULL -- just nulls 
column = 'teamX' OR column IS NULL -- nulls or 'teamX' 
column IS NOT NULL -- any value, but no nulls 
1=1 -- for the case where you don't really want a WHERE clause. All records 

这听起来并不像这是构建代码的最佳方式,但如果你已经通过一些限制是不能改变的,我想你必须做。

3
WHERE column LIKE '%' OR column IS NULL 
+3

有趣的是,相同的答案如何在一个地方得到upvoted,并在其他地方downvoted –

+0

这是否意味着除了查询没有WHERE子句?这是不必要的打击,不是吗? – Kaf

+1

@YuriyGalanter不确定是否有趣。我不确定你是否在暗示某些事情,但是我认为之前使用“AND”的只有**低估的答案。无论如何,这不是我的倒退。而且,不知道它是否重要,但显然我的回答是首先发布的,所以这可能会影响我为什么得到upvotes – Lamak

0

一种情况是不使用where子句。

否则,您可以使用或条件

where (column is null or column like '%something%') 
1

如果我明白你的问题,那么这是你在找什么

SELECT * 
FROM table 
WHERE column LIKE '%' or column Is null 
1

是否select * from table得到你想要的是什么?

1

也许你的意思是“参数可以通过或参数可以为NULL”?

如果是这样那么这样的事情应该做的伎俩

SELECT * FROM table WHERE param IS NULL OR column LIKE '%' + param '%' 

同样,如果参数传递的关键字“ALL”,意思是“选择一切”这将是

SELECT * FROM table WHERE param = 'All' OR column LIKE '%' + param '%' 
3

假设NULL作为参数值的意思是“全部”

WHERE Team = @Team OR @Team IS NULL 

除非你在2008+ 使用OPTION (RECOMPILE)虽然这可以给次优计划。

Dynamic Search Conditions in T-SQL

0

尝试是这样的:

SELECT * FROM table WHERE column LIKE '%' 
Union 
SELECT * FROM table WHERE column IS NULL 

,如果他们有相同的列名和号码将结合两种查询,因为唯一的区别是WHERE子句,它应该是工作