当使用IFF()函数在源和目标两个表之间比较数据时,如果列具有IS NUll值,我将收到“不匹配”。请您给我提建议?
"browserslist": [
"last 1 version",
"> 1%",
"maintained node versions",
"not dead"
]
如果列中的数据匹配,无论是空字符串还是IS NULL值,都应该给我“匹配”结果,如果数据不匹配,我应该收到“不匹配”
答案 0 :(得分:1)
首先,我强烈建议您使用case
而不是iif()
。 case
表达式是标准SQL。 iif()
用于与MS Access进行“向后”兼容性。
第二,您需要明确说明SQL Server中的NULL
比较。它不支持NULL
安全比较。看起来像:
(CASE WHEN T1.MBR_STAT = CAST(T2.MEMSTA_SHORT_NAME AS VARCHAR(10))
THEN 'MATCH'
WHEN T1.MBR_STAT IS NULL AND T2.MEMSTA_SHORT_NAME IS NULL
THEN 'MATCH'
ELSE 'DON''T MATCH'
END) AS MBR_STAT_VALIDATION,
我还感到奇怪的是,当您使用CAST()
来实现此目的时,它具有一个非常好的函数LEFT()
,它更简单并且使逻辑更清晰:
(CASE WHEN T1.MBR_STAT = LEFT(T2.MEMSTA_SHORT_NAME, 10)
THEN 'MATCH'
WHEN T1.MBR_STAT IS NULL AND T2.MEMSTA_SHORT_NAME IS NULL
THEN 'MATCH'
ELSE 'DON''T MATCH'
END) AS MBR_STAT_VALIDATION,
答案 1 :(得分:0)
使用coalesce
进行null检查,并将null替换为永远不会与比较列值匹配的值
IF(coalesce(T1.MBR_STAT,'something_') = CAST(T2.MEMSTA_SHORT_NAME AS VARCHAR(10)),'MATCH', 'DON''T MATCH') AS MBR_STAT_VALIDATION