在WHERE子句中使用CASE而没有ELSE时,NULL是什么意思?

问题描述 投票:0回答:1
declare @Name varchar(45)

SELECT
     *
FROM
     table law
WHERE
     --law.emp = case when isnumeric(@Name) = 1 then @Name else null end
     law.emp = case when isnumeric(@Name) = 1 then @Name end

     or coalesce(law.lname + ', ' + law.fname, '') like '%' + @Name + '%'

我在这里的问题是关注CASE语句,当它评估数值以外的东西时......

如果@Name不是数值,那么真正发生了什么? law.emp = null ???如果是这样,它不应该返回任何结果,因为正确的语法类似于where law.emp is null,对吧?

所以,为了澄清,我的emp列实际上并不包含任何空值。

WHERE评估为不是数字的东西时,我只想弄清楚我的@Name语句真正发生了什么......

正在做什么实际评估? SQL忽略了这个条件吗?

这就是我想要的东西:对于SQL,除非law.emp是数字,否则不要对@Name做任何事情。 (如果是文本,我还有其他使用@Name变量的条件。)

sql sql-server case
1个回答
1
投票

表达方式:

law.emp = NULL

总是返回NULL。在where子句中,将其视为false,并且该行不包含在结果集中。

我更喜欢显式转换:

law.emp = try_convert(int, @Name)

或者emp的任何类型。

© www.soinside.com 2019 - 2024. All rights reserved.