Mysql 如果我们传递空值,Sql查询ISNULL(@parameter,ColumnName)返回什么。?

Mysql 如果我们传递空值,Sql查询ISNULL(@parameter,ColumnName)返回什么。?,mysql,sql,sql-server,mysql-workbench,Mysql,Sql,Sql Server,Mysql Workbench,我想知道这个代码背后的原因。如果我们在isNull中传递columnName,将会发生什么 @parameter = null, select txtAbc,* from table where (txtAbc Like (isNull(@parameter,txtAbc))) 提前谢谢 编辑此问题以避免混淆 我知道isNull将返回true,在这种情况下,查询将如下所示 select txtAbc,* from table where txtAbc Like null 在这种情况下,它不

我想知道这个代码背后的原因。如果我们在isNull中传递columnName,将会发生什么

@parameter = null,

select txtAbc,* from table where (txtAbc Like (isNull(@parameter,txtAbc)))
提前谢谢

编辑此问题以避免混淆

我知道isNull将返回true,在这种情况下,查询将如下所示

select txtAbc,* from table where txtAbc Like null
在这种情况下,它不应该选择任何行,但在我的情况下,它将返回除txtAbc中包含空值的行之外的所有行

我想知道这背后的原因

当运行代码时,我得到的输出相当于 相当于

select * from table where txtAbc is not null
编辑:
PS:请在否决投票前说明原因:P

也许我误解了你的问题,但你可以在下面进行测试

@参数
声明为
NULL
,如果
@参数
NULL
,则使用
ISNULL
设置另一个值,在本例中为
foo
。因此,选择
col
等于
foo

create table #t
(
   Id INT,
   col varchar(60)
)
insert into #t values (1, 'foo'), (2, 'bar')

declare @parameter varchar(60) = null

select *
from #t
where col = isNull(@parameter,'foo')
输出

Id  col
1   foo

如果您使用的是MySQL,则需要
ANSI
等效
COALESCE

select txtAbc,* 
from table 
where (txtAbc Like (isNull(@parameter,txtAbc)))
如果
@parameter=NULL
您会得到:

select txtAbc,* 
from table 
where txtAbc Like txtAbc  
这总是正确的(对于
txtAbc NOT NULL
)。否则与以下内容相同:

select txtAbc,* 
from table 
where txtAbc IS NOT NULL;
出于性能原因,您应该使用下面的代码,因为您的代码是不可销售的

select txtAbc,* 
from table 
where txtAbc Like @parameter
   OR @parameter IS NULL
编辑:

演示:

输出:

╔════════╦════╗
║ txtAbc ║ id ║
╠════════╬════╣
║ aaa    ║  1 ║
║ bbb    ║  2 ║
║ ccc    ║  3 ║
╚════════╩════╝

ISNULL函数在值为NULL时返回1,在值不为NULL时返回0

因此,在您的情况下,如果value@参数为null,那么它将返回1并使
txtAbc
。因此,这类似于写作:

select txtAbc,* from table where txtAbc Like txtAbc 
编辑:

它不返回NULL行的原因是,当您将NULL与NULL进行比较时,结果为false。就这样

if(NULL = NULL)
   print('True')
else
   print('False')

输出将为
False
。因此,具有NULL值的行不会按照您的期望返回。

表达式是NULL值,ISNULL函数将返回1

表达式不是空值,ISNULL函数将返回0

mysql> SELECT ISNULL('');
Result: 0

mysql> SELECT ISNULL(NULL);
Result: 1

ISNULL
顾名思义,将检查值是否为
null
。 如果其“null”将返回
true
else
false


示例:

虽然ISNULL是SQL Server和MySQL的一部分,但标记您正在使用的产品是一个很好的做法:)@rahultripati什么是好的做法,然后是rahul。?在我之前的评论中已经添加了这一点。如果您使用的是MySQL,那么只标记MySQL,而不标记其他产品。它将帮助你以及其他回答的人(顺便说一句,我不是那个因为你感到麻烦而投反对票的人)不,我一点也不觉得麻烦,我认为它的基本sql和问题可以由任何使用sql产品的人来回答。我想这就是stackoverflow限制5个标记而不是1个标记的原因。附言:不,伙计们,谁在否决这个问题,请告诉我原因。那是不对的
用指定的替换值替换NULL。
@EvaldasBuinauskas:-为什么?@RahulTripathi OP说
ISNULL()
检查值是否为NULL并返回true或false。这不是这个函数的作用。我粘贴了MSDN中的描述。@EvaldasBuinauskas:-啊,我采取了另一种方式,我以为你说MSDN引用不正确。(我误解了):(它会忽略输出中包含空值的那一行吗?@Abhii:-在我的情况下,它会忽略,我只是想知道原因。@Abhii:-返回空值的更好方法是检查空值,如
txtAbc IS null
,这也是我的想法,请运行此查询。它不会返回那一行,只是与预期相反。@R阿胡尔Tripathi@Abhii:-好的,我明白你的意思了,事实上,你正在尝试比较
NULL与NULL类似,后者是
False
。你可以使用
if(NULL=NULL)print('True')或者print('False')来验证它
我很确定,您已经发布了相同的答案,这也是我所期望的。请在您的计算机中运行代码,
如果@parameter=NULL
,它相当于
select*from table where txtAbc not NULL
@Abhii Yes假设
txtAbc
不是NULL列。当然,您是对的,因为
NULLLIKE NULL
为NULL且不为true。
mysql> SELECT ISNULL('');
Result: 0

mysql> SELECT ISNULL(NULL);
Result: 1