您好!欢迎访问家园网-www.jy.wang!

家园网

空值转为0

网络 作者:本站 点击:
SELECT BookName,Writer,ISNULL(newbook,0) AS newbook
FROM bookinfo_zerobasis;

不会把newbook一列的值全部转成了0了吧?


你问到了关键点。

先说结论:是的,如果 newbook 这一列本身是 NULL,就会变成 0;如果原本有非 NULL 值(比如 5、-3),则保持原值,不会被转成 0。


拆解你的 SQL

sql

SELECT 
    BookName,
    Writer,
    ISNULL(newbook, 0) AS newbookFROM bookinfo_zerobasis;

  • ISNULL(newbook, 0)
    意思是:

    • 如果 newbook 列的值 是 NULL → 返回 0

    • 如果 newbook 列的值 不是 NULL → 返回该值本身

  • AS newbook
    只是把这一列查询结果的列名命名为 newbook(可能覆盖原列名)


举例说明

假设 bookinfo_zerobasis 表的数据是:

BookNameWriternewbook
红楼梦曹雪芹NULL
西游记吴承恩3
水浒传施耐庵NULL
三国演义罗贯中0

执行你的 SQL 后,结果变成:

BookNameWriternewbook
红楼梦曹雪芹0
西游记吴承恩3
水浒传施耐庵0
三国演义罗贯中0

注意:原本就是 0 的那一行,仍然保持 0,不会变。


你担心的“全部转成0”不会发生

  • 不会把所有行的值都变成 0,只有原本是 NULL 的才会变。

  • 原本非 NULL 的数字、字符串(如果是可转换类型)都会保留原值。


常见混淆点

ISNULL 和 COALESCE 在 SQL Server / 其他数据库中行为类似:

sql

-- 你的写法(SQL Server)ISNULL(newbook, 0)-- 等价于标准 SQL 写法COALESCE(newbook, 0)

两者都不会“强制全列变0”,只是处理 NULL


如果你真的想把整列都改成 0(不管原来是什么)

那需要用 UPDATE

sql

UPDATE bookinfo_zerobasisSET newbook = 0;

但你的 SELECT 语句只是查询显示,不会修改表里的原始数据。


一句话总结

ISNULL(newbook, 0) 只把 newbook 列中原本是 NULL 的行显示为 0,原本有值的保持不变,不是整列都变成 0



标签: