WHERE 子句中的 isnull 函数
isnull function in WHERE clause
我正在尝试解决存储过程中的问题,但遇到了一个让我烦恼的问题。
基本上,isnull
对 T0 中的一条记录按预期工作,但在另一条记录中则不然,两者均 T0.FatherCard
为 NULL。我不明白为什么。
SELECT *
FROM OINV T0
WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0189'
Returns 符合预期的一整行数据。
SELECT *
FROM OINV T0
WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0817'
Returns 没什么。我期待一整行数据。
在这两种情况下,FatherCard = NULL
CardCode FatherCard Table
------------------------------
C0189 NULL OINV
C0817 NULL OINV
FatherCard
和 CardCode
都是相同的类型 (nvarchar
) 和长度 (50)。
如果我删除 ISNULL
函数并简单地 select WHERE T0.CardCode = C0817
那么它会按预期工作。
是否有可能 T0.FatherCard
对于 ISNULL
评估而言实际上不是 NULL,并且正在返回其他一些值?
请使用
where columnname is null
有2种可能。
- FatherCard 可能有字符串值 "NULL" 而不是 be NULL.
- 您可以在 C0817 的末尾有多余的空格,即
'C0817 '
检查使用:
SELECT '[' + CardCode + ']', ISNULL(FatherCard, 'Yes is NULL')
FROM OINV
WHERE RTRIM(CardCode) = 'C0817'
我正在尝试解决存储过程中的问题,但遇到了一个让我烦恼的问题。
基本上,isnull
对 T0 中的一条记录按预期工作,但在另一条记录中则不然,两者均 T0.FatherCard
为 NULL。我不明白为什么。
SELECT *
FROM OINV T0
WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0189'
Returns 符合预期的一整行数据。
SELECT *
FROM OINV T0
WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0817'
Returns 没什么。我期待一整行数据。
在这两种情况下,FatherCard = NULL
CardCode FatherCard Table
------------------------------
C0189 NULL OINV
C0817 NULL OINV
FatherCard
和 CardCode
都是相同的类型 (nvarchar
) 和长度 (50)。
如果我删除 ISNULL
函数并简单地 select WHERE T0.CardCode = C0817
那么它会按预期工作。
是否有可能 T0.FatherCard
对于 ISNULL
评估而言实际上不是 NULL,并且正在返回其他一些值?
请使用
where columnname is null
有2种可能。
- FatherCard 可能有字符串值 "NULL" 而不是 be NULL.
- 您可以在 C0817 的末尾有多余的空格,即
'C0817 '
检查使用:
SELECT '[' + CardCode + ']', ISNULL(FatherCard, 'Yes is NULL')
FROM OINV
WHERE RTRIM(CardCode) = 'C0817'