I have a table test with 3 column A,B and C
A B C
------------------------------
David Dav David
Bill Bill Bill
Cathy Cathy
Rose Ros Ros
Mike Mik
**Expected output**
A B C
----------------------------
Rose Ros Ros
Mike Mik
这里的逻辑是当A不为空时,A与C的比较B否则与C
进行比较到目前为止我尝试了什么
select * from test
where a <> c
or b <> c
但它没有给我正确的输出,任何人都可以解释我做错了什么。
答案 0 :(得分:1)
使用ISNULL
select * from test
where isnull(nullif(a,''),b) <> c
答案 1 :(得分:0)
您没有检查A是否为空并且使其成为查询选择的条件,为什么不简单地添加条件:!isnull(a)
select * from test
where
!isnull(a)
and (a <> c or b <> c)
答案 2 :(得分:0)
我的建议使用CASE
与LEN()
DECLARE @Dummy TABLE(A VARCHAR(100),B VARCHAR(100),C VARCHAR(100));
INSERT INTO @Dummy VALUES
('David','Dav','David')
,('Bill','Bill','Bill')
,('','Cathy','Cathy')
,('Rose','Ros','Ros')
,('','Mike','Mik');
SELECT *
FROM @Dummy
WHERE CASE WHEN LEN(A)>0 THEN A ELSE B END <> C
LEN()
的最大优势在于其处理NULL
和空白的固有能力。当值为LEN
时,0
返回NULL
,当值为空字符串时,即使值包含一个或多个空格,也会返回。{/ p>