IsNull与Equal?这意味着什么?

时间:2016-12-27 16:02:00

标签: sql-server

我有一个基本的SQL问题

此代码中IsNull()= 0的含义是什么? 据我所知,=赋值,但在这种情况下,它在Where语句中使用。 希望有人可以向我解释:)

    Where       vol.espe_codigo =   matriz.espe_codigo
    And         IsNull(costo_gerencias.plde_codigo,0)   =   0

3 个答案:

答案 0 :(得分:2)

这意味着如果costo_gerencias.plde_codigo为null,它将返回0或者ISNULL函数的第二个参数。在这种情况下,WHERE子句基本上是&#34;其中vol.espe_codigo等于matriz.espe_codigocosto_gerencias.plde_codigo为空或等于零。&#34; < / p>

答案 1 :(得分:2)

isnull(firstvalue,secondvalue)测试firstvalue的值是否为NULL。当值不为null时返回此值,但是当值为null时返回值为secondvalue。

示例:

declare @test varchar(100) = 'abc'
declare @test2 varchar(100) = '123'

isnull(@test, @test2) will return 'abc'

第二个例子:

declare @test varchar(100) = null
declare @test2 varchar(100) = '123'

isnull(@test, @test2) will return '123'

第三个例子:

declare @test varchar(100) = ''
declare @test2 varchar(100) = '123'

isnull(@test, @test2) will return ''

我最常用它来检查varchar列,因为它们可能包含一个与NULL不同的空字符串,但是在DataGridView或TextBox中你看不到差异。

答案 2 :(得分:2)

IsNull()是一个函数,它接受任意类型的两个输入值;但是第二个必须可以隐式转换为第一个参数的类型。 (见链接)

数据库引擎评估第一个参数,如果它为null,则系统返回第二个参数。如果第一个参数不为null,则返回第一个参数的值。

因此,在您的情况下,如果plde_codigo为null,则引擎将返回值0。如果不为null,则返回传入的plde_codigo的值。

这反过来意味着您的结果集将只包含plde_Codigo中具有NULL或0值的记录;除了其他限制标准外。

它也可以写成:

(costo_gerencias.plde_codigo is NULL OR costo_gerencias.plde_codigo = 0)

或更多数据库不可知:

coalesce(costo_gerencias.plde_codigo,0)=0

但在这种情况下,plde_codigo必须是数字;而使用isNull()

时可能是文字