sql - 删除这些该死的 NULL

标签 sql sql-server syntax

我有一个看起来很简单的问题,但由于某种原因,我无法从打击选择中删除空值。我需要做的就是返回一行,即没有 NULL 值的行。有人可以指出我的方法中的错误吗? :)

我运行时得到的结果:

EffectiveDate            Refund
2015-05-18 00:00:00.000  NULL
2015-05-18 00:00:00.000   1

我期望得到的返回:

EffectiveDate            Refund
2015-05-18 00:00:00.000   1

我的查询:

select md.EffectiveDate,
       CASE 
         WHEN 
           ISNULL(ConfigID,'') = 3 THEN '1'
         WHEN 
           ISNULL(ConfigID,'') = 4 THEN '2' 
       END AS Refund
from dbo.PartnerBankConfig md
where md.PartnerID= 100000509
and md.EffectiveDate = (select max(EffectiveDate)
                        from dbo.PartnerBankConfig
                        where PartnerID = 100000509
                        and ISNULL(ConfigID,'') IS NOT NULL)

最佳答案

您得到此 null 是因为数据与 case 语句中的任何条件都不匹配。换句话说,在该行中,您的 ConfigID 值既不是 3 也不是 4。该行为当没有任何条件匹配时,case 语句的计算结果为 null,因此该行将返回 null。

此外,此函数:ISNULL(ConfigID,'') 将任何 null 替换为空字符串(非空值)。

因此,ISNULL(ConfigID,'') IS NOT NULL 没有意义。它始终为 true,因为 ISNULL 始终返回非空值。您应该从查询中删除所有对 ISNULL() 的使用,因为它们都不是必需的。

关于sql - 删除这些该死的 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43806442/

相关文章:

python - 在cursor.execute()中的sql查询中传递多个参数

sql - 如何将音频插入 SQL Server

sql - 如何用T-SQL编写传输

ios - 如何使用 ES6 语法对 React Native 中的 "Unexpected token, expected ; (44:33)"进行故障排除

php - 脚本中出现意外的 ';'.. 但是当我删除 T_STRING 错误时

mysql - DATE 的索引(列)

Mysql:优化针对大表的查询

sql - 数据库内的地址标准化

sql-server - SQL Server 中 CONTEXT_INFO 的范围是什么?

c++ - 为什么有些人更喜欢 "T const&"而不是 "const T&"?