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

如何修改SQL查询提取STORE/PROTECT前子串并规避错误?

解决SQL提取关键词前子串的场景覆盖问题

修正后的SQL查询

DECLARE @TestVariable AS VARCHAR(MAX)='UNLAB ABCFG DRETFG FOO BARFOO 3990MG TABLETS, STORE AT 15-30°C.'

SELECT 
    CASE 
        WHEN MIN_POS = 0 THEN ''
        ELSE SUBSTRING(clean_str, 1, MIN_POS - 1)
    END AS pack_description
FROM (
    SELECT 
        ISNULL(@TestVariable, '') AS clean_str,
        MIN(CHARINDEX(keyword, UPPER(ISNULL(@TestVariable, '')))) AS MIN_POS
    FROM (VALUES ('STORE'), ('PROTECT')) AS Keywords(keyword)
) AS subquery

关键改进点

  1. NULL值处理:用ISNULL(@TestVariable, '')将NULL转换为空字符串,避免UPPER()和CHARINDEX()因NULL值触发报错。
  2. 简化多关键词位置判断:通过子查询生成关键词列表,用MIN(CHARINDEX(...))直接获取两个关键词中先出现的位置,省去原查询中复杂的CASE分支对比逻辑。
  3. 边界场景兼容:
    • 当字符串不含任何目标关键词时,CHARINDEX返回0,CASE分支直接返回空字符串。
    • 当关键词位于字符串开头(CHARINDEX返回1),MIN_POS - 1 = 0,SUBSTRING会返回空字符串,符合需求。

场景验证

  • 仅含单个关键词:例如字符串为"KEEP DRY, PROTECT FROM LIGHT",会提取"KEEP DRY, "。
  • 关键词在开头:字符串为"STORE IN COOL PLACE",返回空字符串。
  • 两关键词均存在:字符串为"SEAL TIGHT, PROTECT FROM MOISTURE, STORE AT ROOM TEMP",会提取先出现的PROTECT之前的内容"SEAL TIGHT, "。
  • 字符串为NULL:返回空字符串,无报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:02:13