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

SQL Server如何提取患者主诉字段内指定关键词后的首个数值

SQL Server自定义函数实现关键词后首个数值提取

实现逻辑

通过字符定位、截取、规则匹配三步完成数值提取,兼容整数、带小数点的浮点数,关键词匹配失败或无对应数值时返回NULL。

完整函数代码

CREATE FUNCTION dbo.patientstringfunction
(
    @inputString NVARCHAR(MAX), -- 存储患者主诉的文本字段
    @keyWord NVARCHAR(200) -- 要匹配的指定关键词
)
RETURNS DECIMAL(18,2)
AS
BEGIN
    DECLARE @keyPos INT, @afterKey NVARCHAR(MAX), @numStart INT, @numEnd INT, @result DECIMAL(18,2)
    
    -- 查找关键词位置,不存在直接返回NULL
    SET @keyPos = CHARINDEX(@keyWord, @inputString)
    IF @keyPos = 0 RETURN NULL

    -- 截取关键词之后的所有内容
    SET @afterKey = SUBSTRING(@inputString, @keyPos + LEN(@keyWord), LEN(@inputString))

    -- 定位首个数字/小数点的起始位置
    SET @numStart = PATINDEX('%[0-9.]%', @afterKey)
    IF @numStart = 0 RETURN NULL

    -- 定位数字结束位置(第一个非数字/小数点的位置)
    SET @numEnd = PATINDEX('%[^0-9.]%', SUBSTRING(@afterKey, @numStart, LEN(@afterKey)))
    IF @numEnd = 0 SET @numEnd = LEN(@afterKey) + 1

    -- 转换为数值,格式异常时返回NULL
    BEGIN TRY
        SET @result = CAST(SUBSTRING(@afterKey, @numStart, @numEnd - 1) AS DECIMAL(18,2))
    END TRY
    BEGIN CATCH
        SET @result = NULL
    END CATCH

    RETURN @result
END
GO

使用示例

针对样例文本患者头痛,体重:156kg,身高:170cm,调用方法如下:

-- 提取体重数值
SELECT dbo.patientstringfunction(patient, '体重:') FROM patient
-- 返回结果:156.00

-- 提取身高数值
SELECT dbo.patientstringfunction(patient, '身高:') FROM patient
-- 返回结果:170.00

注意事项

  • 关键词需与文本中的表述完全一致,比如文本中用中文冒号:,传入的关键词不能用英文冒号:,否则会匹配失败
  • 支持整数、带小数点的浮点数提取,若数值存在多个小数点等非法格式,会返回NULL
  • 若需要返回整数结果,可将函数返回值类型改为INT,同步修改CAST转换的目标类型即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:24:00