如何在使用STRING_SPLIT拆分字符串时保留NULL值记录
问题原因
过滤条件写在外层WHERE子句时,当原记录Fig字段为NULL,STRING_SPLIT函数无返回结果,OUTER APPLY关联后对应的f.value为NULL,而SQL中NULL NOT LIKE 'MB%'的判断结果为UNKNOWN,会被WHERE条件直接过滤,最终导致Fig为NULL的记录丢失。
解决方案
将针对拆分结果的过滤逻辑,从外层WHERE子句移动到OUTER APPLY的内部子查询中。此时过滤规则仅作用于拆分生成的字符串片段,不会影响原表中无有效拆分结果的记录(即Fig为NULL的记录),修改后的代码如下:
SELECT source.id ,source.code ,codePub = LEFT(source.Fig,5) ,f.value AS [FigRef] FROM [dbo].[sourceData] AS source OUTER APPLY ( SELECT value FROM STRING_SPLIT(source.[Fig], '@') WHERE value NOT LIKE 'MB%' ) AS f
执行上述语句后:
- Fig非空的记录会正常拆分,自动过滤掉以'MB'开头的拆分片段,和原有逻辑一致
- Fig为NULL的id=3记录会被保留,
codePub和FigRef字段均返回NULL - 最终返回总记录数为预期的6条
内容的提问来源于stack exchange,提问作者user19435415
相关产品推荐
相关产品推荐

