我有查询:
SELECT Stage1
,Stage2
,Stage3
FROM dbo.Cases
WHERE Number='6913'
结果:
Stage1 Stage2 Stage3
==========================
NULL Settlement Stage1
但是当我尝试时:
SELECT COALESCE(Stage1 ,Stage2 ,Stage3) AS [Exit]
FROM dbo.Cases
WHERE Number = '6913'
结果仍为NULL:
EXIT
====
NULL
为什么会这样,结果应该是'结算'
请有人可以帮忙????
答案 0 :(得分:1)
我能想到的唯一解释是你的Stage1字段中的字符串值为NULL。查看此查询是否返回您的行以确定是否是这种情况:
SELECT Stage1
,Stage2
,Stage3
FROM dbo.Cases
WHERE Number='6913'
AND Stage1 = 'NULL'
如果字符串值为NULL,您可以尝试:
SELECT COALESCE(NULLIF(Stage1, 'NULL'), NULLIF(Stage2, 'NULL'), NULLIF(Stage3, 'NULL'))
FROM dbo.Cases
WHERE Number='6913'
答案 1 :(得分:1)
检查该值是否为实际NULL而不是varchar值' NULL'。
你可以这样做:
SELECT * FROM dbo.Cases WHERE Stage1 IS NULL
SELECT * FROM dbo.Cases WHERE Stage1 = 'NULL'
看看会发生什么。
答案 2 :(得分:0)
您可以采取其他一些措施来删除NULLS。
过滤掉空值:
SELECT Stage1
,Stage2
,Stage3
FROM dbo.Cases
WHERE Number='6913'
AND State1 IS NOT NULL
当Stage1为null时,或放置并清空字符串:
SELECT ISNULL(Stage1, '')
,Stage2
,Stage3
FROM dbo.Cases
WHERE Number='6913'
答案 3 :(得分:0)
我有同样的奇怪行为。我认为问题不在于COALESCE()函数,而在于属性/列中的值。
在我的情况下,该值似乎为NULL,并且数据流的方式应该为NULL。但是,Postgres WHERE子句或COALESCE()函数都不会将该值解释为NULL。我真的不知道这是什么价值。
我的kluge解决方案是获取值的MD5哈希,并在我的查询逻辑中使用MD5。我真的不知道该属性的实际/内部值是多少,但是我们可以计算MD5哈希并将其用作代理。
, COALESCE(
CASE WHEN md5(value1) <> 'd41d8cd98f00b204e9800998ecf8427e' THEN value1 ELSE NULL END
, CASE WHEN md5(value2) <> 'd41d8cd98f00b204e9800998ecf8427e' THEN value2 ELSE NULL END
, CASE WHEN md5(value3) <> 'd41d8cd98f00b204e9800998ecf8427e' THEN value3 ELSE NULL END
) AS desired_value