程序荒废了一年多,不能再这样下去,所以我没看到一点就要把它写下来。
今天看到我原来的程序里有这样一条sql语句 select isnull(roid,'') from Roles;乍一看还有些陌生,就想了想isnull 的用法。
语法
ISNULL ( check_expression , replacement_value )
参数
check_expression
将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。
replacement_value
在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。
返回类型
返回与 check_expression 相同的类型。
注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。
示例
A. 将 ISNULL 与 AVG 一起使用
下面的示例查找所有书的平均价格,用值 $10.00 替换 titles 表的 price 列中的所有 NULL 条目。
USE pubs
GO
SELECT AVG(ISNULL(price, $10.00))
FROM titles
GO
下面是结果集:
--------------------------
14.24
(1 row(s) affected)
B. 使用 ISNULL
下面的示例为 titles 表中的所有书选择书名、类型及价格。如果一个书名的价格是 NULL,那么在结果集中显示的价格为 0.00。
USE pubs
GO
SELECT SUBSTRING(title, 1, 15) AS Title, type AS Type,
ISNULL(price, 0.00) AS Price
FROM titles
GO
下面是结果集:
Title Type Price
--------------- ------------ --------------------------
The Busy Execut business 19.99
Cooking with Co business 11.95
You Can Combat business 2.99
Straight Talk A business 19.99
Silicon Valley mod_cook 19.99
The Gourmet Mic mod_cook 2.99
The Psychology UNDECIDED
最近用isnull用的很不爽.看了N次帮助还不太明白, 请问:
select isnull(数字,0) as 值 from 表名
这样写是不是 isnull 没有生效呢? 如果列名"数字"无值, 用select还是空值, 并不是显示一个数字 0 出来, 为什么? 难道必须用聚合函数这样写才行吗?
select isnull(sum(数字),0) as 值 from 表名
这时若未找到值, 则出来的结果就是 0 了, 为什么?
使用 isnull 还有其它什么限制吗?
可以试试select isnull(null,0) as 值
如果包括 空格 则 isnull(数字,0) 结果为空格
isnull 只用来判断是否有null
select isnull(null,0)
select isnull(null,'被null的字符')
select isnull('null','不会出来应为它不是null')
select case when null is null then '是null' else '不是null' end
select case when 'null' is null then '是null' else '不是null' end
select isnull(sum(数字),0) as 值 from 表名
如果有數字是null則sum(數字)是NULL,則返回值是0
應該寫成;
select sum(isnull(数字,0)) as 值 from 表名
select isnull(s_z,0) as 数字 from 表名 where id>100
这时分析器显示的 "数字" 列下面没有内容, 而我用
select isnull(sum(s_z),0) as 数字 from 表名 where id>100
它这里在 "数字" 列下面显示的值是 0 , 为什么?
8 select sum(1) from sysobjects where 1=2
它会返回一个null
9 select 1 from sysobjects where 1=2
它什么也不返回如果你要:
select isnull((select 1 from sysobjects where 1=2),0)
如果是这样, 我如何在普通的 select 没有返回东东的时候将它的值设为 0 呢? 已如同 isnull 的功能那样?
select在没有符合条件的记录时什么也不返回,而集合函数一定返回总计结果null,这难道需要“颠覆”吗?