You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中用SplitString函数结合IN子句查询NULL值的解决方案

解决SQL IN子句无法匹配NULL值的问题

因为SQL的IN操作符会忽略NULL值,所以直接用IN无法同时匹配拆分结果里的普通字符串和NULL。以下是两种实用的解决方式:

方法一:拆分结果包含NULL时,单独补充NULL判断

把查询条件拆成两部分:一部分匹配拆分后的非NULL值,另一部分在拆分结果存在NULL时,匹配表中ModelName为NULL的记录。

SELECT * 
FROM Modeltable 
WHERE 
    -- 匹配拆分后的非NULL字符串
    ModelName IN (SELECT [Value] FROM XYZ.SplitString(N';01e178bd-8f6c-488f-a0fa-81ffb598e569', ';') s WHERE [Value] IS NOT NULL)
    -- 当拆分结果里有NULL时,额外匹配表中ModelName为NULL的行
    OR (
        ModelName IS NULL 
        AND EXISTS (SELECT 1 FROM XYZ.SplitString(N';01e178bd-8f6c-488f-a0fa-81ffb598e569', ';') s WHERE [Value] IS NULL)
    )

方法二:用EXISTS替代IN,兼容NULL匹配

改用EXISTS子句,通过明确的条件同时处理普通字符串相等和两边均为NULL的场景:

SELECT * 
FROM Modeltable m
WHERE EXISTS (
    SELECT 1 
    FROM XYZ.SplitString(N';01e178bd-8f6c-488f-a0fa-81ffb598e569', ';') s
    -- 同时处理正常相等和两边都是NULL的情况
    WHERE (m.ModelName = s.[Value] OR (m.ModelName IS NULL AND s.[Value] IS NULL))
)

如果你的SQL版本支持IS NOT DISTINCT FROM(比如SQL Server 2022及以上、PostgreSQL),可以简化判断逻辑:

SELECT * 
FROM Modeltable m
WHERE EXISTS (
    SELECT 1 
    FROM XYZ.SplitString(N';01e178bd-8f6c-488f-a0fa-81ffb598e569', ';') s
    WHERE m.ModelName IS NOT DISTINCT FROM s.[Value]
)

内容的提问来源于stack exchange,提问作者Mahbub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:05:12