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

如何编写SQL函数实现Category参数匹配后返回对应Value的功能

SQL 自定义函数实现(适配SQL Server)

实现逻辑

将两个逗号分隔的入参按位置一一对应拆分成键值对,和传入的岗位分类字段做匹配,匹配成功返回对应位置的数值,无匹配返回0。

版本1:SQL Server 2022及以上(支持STRING_SPLIT序号参数)

函数定义:

CREATE FUNCTION dbo.GetMappedValue
(
    @Category VARCHAR(50),
    @Value VARCHAR(50),
    @JobCategory VARCHAR(50)
)
RETURNS INT
AS
BEGIN
    DECLARE @Result INT = 0
    -- 按序号匹配两个拆分后的字符串
    SELECT @Result = CAST(v.value AS INT)
    FROM STRING_SPLIT(@Category, ',', 1) c
    INNER JOIN STRING_SPLIT(@Value, ',', 1) v 
        ON c.ordinal = v.ordinal
    WHERE c.value = @JobCategory

    RETURN ISNULL(@Result, 0)
END
GO

版本2:SQL Server 低版本兼容写法(基于XML拆分带序号)

如果你的数据库版本低于2022,不支持STRING_SPLIT的ordinal参数,用这个版本:

CREATE FUNCTION dbo.GetMappedValue
(
    @Category VARCHAR(50),
    @Value VARCHAR(50),
    @JobCategory VARCHAR(50)
)
RETURNS INT
AS
BEGIN
    DECLARE @Result INT = 0

    ;WITH CategorySplit AS (
        SELECT 
            value = n.value('.', 'varchar(50)'),
            ordinal = ROW_NUMBER() OVER (ORDER BY (SELECT 0))
        FROM (SELECT CAST('<x>' + REPLACE(@Category, ',', '</x><x>') + '</x>' AS XML)) AS t(x)
        CROSS APPLY x.nodes('/x') AS m(n)
    ),
    ValueSplit AS (
        SELECT 
            value = n.value('.', 'int'),
            ordinal = ROW_NUMBER() OVER (ORDER BY (SELECT 0))
        FROM (SELECT CAST('<x>' + REPLACE(@Value, ',', '</x><x>') + '</x>' AS XML)) AS t(x)
        CROSS APPLY x.nodes('/x') AS m(n)
    )
    SELECT @Result = v.value
    FROM CategorySplit c
    INNER JOIN ValueSplit v ON c.ordinal = v.ordinal
    WHERE c.value = @JobCategory

    RETURN ISNULL(@Result, 0)
END
GO

使用示例

DECLARE @Category VARCHAR(50)='ABC,DEF'
DECLARE @Value VARCHAR(50)='1,2'

SELECT 
    JOB AS JobNo,
    dbo.GetMappedValue(@Category, @Value, CATEGORY) AS VALUE
FROM JOB

返回结果和预期完全一致:

JOB VALUE
123 1
234 2
234 0

注意:如果@Category和@Value的元素数量不一致,只会取两者较短的长度做匹配,多出的元素不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:06:03