像'%'不接受NULL值

时间:2010-10-13 13:51:28

标签: sql null

我的查询是根据用户的输入构建的(通过html表单传递)。它看起来像(简单的例子):

Select * From [table] Where [table].[column] like '<parameter>'

此参数可以是可选的,因此如果用户将相应的输入字段留空,则传递。它工作正常,直到我遇到NULL值。我理解'%'匹配的符号不是null,但我想在这种情况下将NULL视为空字符串。

我该怎么办?当用户离开空输入时,更改查询(如何?)或传递另一个符号?

感谢。

PS。这是现有系统的真正问题,我知道它远非最佳解决方案,但我必须处理它。

10 个答案:

答案 0 :(得分:52)

您可以使用coalesce将null视为空字符串:

where COALESCE([table].[column],'') like '<parameter>'

在SQL Server上,您还可以使用IsNull

where IsNull([table].[column],'') like '<parameter>'

答案 1 :(得分:3)

我认为这可行:

Select * From [table] Where [table].[column] is null or [table].[column] like '<parameter>'

答案 2 :(得分:3)

嗯,怎么样

SELECT 
  * 
FROM 
  [table] 
WHERE
  ([table].[column] like <parameter>) OR 
  (<parameter> = '%')

...所以当你传递'%'时,你会得到所有的行,否则就像你现在拥有它一样。

答案 3 :(得分:3)

isnull([table]。[column],'')喜欢'%'

像魅力一样工作

答案 4 :(得分:1)

发表两个声明!如果用户没有传递参数user:

Select * From [table] Where [table].[column] like '%' or [table].[column] is null;

答案 5 :(得分:1)

基于此问题的Index in Where Clause问题

where COALESCE([table].[column],'') like '<parameter>'

是:

如果您在[column]上使用了索引,由于COALESCE函数,SQL Server无法使用您的索引,这意味着您已经浪费了索引

AND

采用这种方法的问题

Where [table].[column] like '%' or [table].[column] is null

是:

如果[table]。[column]为null,则代码如下:

Where null like '%' or [table].[column] is null

并且无论Where子句的第二部分([table]。[column]为null) 评估结果将是UNKNOWN和记录输出的SQL Server过滤器。

NULL或True = UNKNOWN

NULL或False = UNKNOWN

所以这是优化的和包含空的方法:

Select * From [table] 
 WHERE 
      CASE 
          WHEN [table].[column] IS NULL THEN 1 
          WHEN [table].[column] like '<parameter>' THEN 1 
          ELSE 0 
      END   =  1

答案 6 :(得分:0)

怎么样..

Select * From [table] Where ISNULL([table].[column], '') like '<parameter>'

所以这将取你的实际列值,或者如果那是空的一个空字符串并比较它对你的参数,假设你使用ms sql server ..

答案 7 :(得分:0)

美好的一天,使用这个解决方案,我认为它是解决方案的混合物:

factor

如果您只想从参数开始,请删除第一个'%'和加号

我希望你觉得它很有用

答案 8 :(得分:0)

我想要类似的东西,实际上能够找到'%'(全部),包括 null 或输入时的特定值。

对于Oracle isnull不起作用,在我的情况下COALESCE也不起作用。

我在where子句中使用了这个选项:

where decode(table1.field1,null,' ',table1.field1) like '%'

希望它适用于其他人。

答案 9 :(得分:0)

对于SQLITE

SELECT * FROM [table] WHERE IFNULL([table].[column],'') like '<parameter>'
相关问题