选择所有内容的WHERE语句(内容和NULL)

时间:2013-09-25 15:13:45

标签: sql sql-server

如何返回所有可能性,无论是内容还是NULL?

如果我想要返回所有不为空的内容:

SELECT * FROM table WHERE column LIKE '%'

如果我想返回所有NULL:

SELECT * FROM table WHERE column IS NULL

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

我怎样才能做到这一点?

编辑:

让我更好地澄清一下。我有一个下拉列表,将显示这样的内容

- 选择全部 - A队 B队 ...

因此,如果选择-Select All-,那么我需要查询返回所有NULL和任何团队

如果选择了A队,我只需要显示A组而不显示NULL等等......

我无法将查询更改为单个变量(参数)

8 个答案:

答案 0 :(得分:3)

WHERE column LIKE '%' OR column IS NULL

答案 1 :(得分:3)

假设NULL为参数值意味着“全部”

WHERE Team = @Team OR @Team IS NULL

除非你在2008 + 使用OPTION (RECOMPILE),否则这可以提供次优计划。

请参阅Dynamic Search Conditions in T-SQL

答案 2 :(得分:2)

这很简单。只获得NULLS:

SELECT * FROM table 
WHERE column IS NULL

仅获取NOT 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 :(得分:1)

如果我理解你的问题,那么这就是你要找的东西

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

答案 4 :(得分:1)

select * from table可以得到你想要的吗?

答案 5 :(得分:1)

也许您的意思是“参数可以传递或参数可以为NULL ”?

如果是这样,那么这样的事情应该可以解决问题

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

同样,如果参数传递关键字'ALL'意味着“选择所有内容”,那么它将是

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

答案 6 :(得分:0)

一个案例是不使用任何where子句。

否则你可以使用或条件

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

答案 7 :(得分:0)

尝试这样的事情:

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

如果它们具有相同的列名和数字,它将结合两个查询,因为唯一的区别是where子句,它应该正常工作