34,837
社区成员




declare @n decimal(10,2)
select isnull(@n,'10')
/*
10.00
*/
select isnull(@n,'aa')
/*
这个会报错,因为'aa'无法转换为decimal(10,2)
*/
SELECT name, status, ISNULL(status, 0) AS Expr1
FROM ISNULL_TEST
WHERE status is null or status=0
SELECT name, status, ISNULL(status, 0) AS Expr1
FROM ISNULL_TEST
where (ISNULL(status, 0) = 0)
--问题是status里没有0 ...哈哈~等待高人解答~
select *
from ISNULL_TEST
where status = ''
/*
name status
AAAA
*/
select *
from ISNULL_TEST
where status is NULL
/*
name status
BBBB NULL
*/
--楼主再想想吧,别被Oracle和MSsql弄混了。
CREATE TABLE [dbo].[ISNULL_TEST](
[name] [varchar](5) COLLATE Chinese_PRC_CI_AS NULL,
[status] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
insert into ISNULL_TEST values('AAAA','');
insert into ISNULL_TEST values('BBBB',NULL);
insert into ISNULL_TEST values('CCCC','123');
--然后查询:
SELECT name, status, ISNULL(status, 0) AS Expr1
FROM ISNULL_TEST
WHERE (ISNULL(status,'') = '')
/*
name status Expr1
----- -------------------------------------------------- --------------------------------------------------
AAAA
BBBB NULL 0
(2 行受影响)
*/
可以变通处理。select * from ISNULL_TEST
/*
name status
AAAA
BBBB NULL
CCCC 123
*/
SELECT name, status, ISNULL(status, 0) AS Expr1
FROM ISNULL_TEST
WHERE (ISNULL(status, 0) = 0)
/*
name status Expr1
AAAA
BBBB NULL 0
*/
SELECT name, status, ISNULL(status,'A') AS Expr1,NULLIF(status,NULL) AS Expr2
FROM ISNULL_TEST
/*
name status Expr1 Expr2
AAAA
BBBB NULL A NULL
CCCC 123 123 123
*//*
在MS中''和NULL,'NULL'是不一样的。
ISNULL_TEST 中AAAA的status不为NULL,返回''值,
BBBB的status为NULL,返回NULL值。
跟你的结果一样,有什么问题?
这样就不会有AAAA的数据了。
SELECT name, status, ISNULL(status, 0) AS Expr1
FROM ISNULL_TEST
WHERE status is null