需要在IN'子句中接受EMPTY值的SQL查询

时间:2015-02-26 07:53:07

标签: sql sql-server sql-server-2008

我是SQL的新手。 我有一个要求,用户可以从3个'多列表'下拉框中的任何一个中选择任何值。在某些情况下,用户可以完全忽略3中的任何下拉框。

所以我需要一个可以处理它的查询。 带有值的等效选择查询如下所示。

SELECT * FROM TABLE WHERE 
description1 LIKE '%SHK ABS%' OR 
description2 LIKE '%SHK ABS%' OR 
description3 LIKE '%SHK ABS%' OR 
description4 LIKE '%SHK ABS%' and 
**Year** in ('2017','2016') and 
**Program** in ('CDPGM');

问题: 我尝试了很多,但无法编写一个接受'IN'子句中的空值的查询。 示例:如果用户dint选择任何年份和程序,则将传递空值。基本上,查询应该像忽略where子句中的列一样。

知道怎么做到这一点?

2 个答案:

答案 0 :(得分:0)

根据我的理解,根据您的情况,可以有三种类型的空值: NULL 空白空格

匹配的in子句如下所示:

SELECT * FROM table_name WHRE col_name in (null, '', <your other values>);

我在MySQL 5.6(最新版本)中测试过它。对于其他版本/ DBMS,您可能需要使用trim函数:

SELECT * FROM table_name WHRE trim(col_name) in (null, '', <your other values>);

修改

对于整数类型列,空值a仅为 NULL ,或者您也可以将0视为空值:

SELECT * FROM table_name WHRE col_name in (null, 0, <your other values>);

答案 1 :(得分:0)

根据您发布的内容,我猜您在定义空白值时遇到问题。

SELECT * FROM table
WHERE col_name IS NULL OR
      col_name IN (<list_of_your_values>, '', 0,)