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

如何从关联SQL表的PuniNaziv列中提取PW开头的指定字符串片段

实现思路

你需要的核心能力是从PuniNaziv字段中提取固定格式的PW前缀编码,不需要用IF流程控制语句,两种方案可选:

方案1:自动提取字符串(适配后续新增ID场景)

利用SQL字符串匹配函数定位PW编码的起止位置,直接提取,不需要硬编码ID对应关系,后续新增其他PW开头的产品也能自动适配:

SELECT 
    ID,
    SUBSTRING(
        PuniNaziv,
        PATINDEX('%PW[0-9]%', PuniNaziv), -- 定位PW+数字的起始位置
        CHARINDEX(' ', PuniNaziv, PATINDEX('%PW[0-9]%', PuniNaziv)) - PATINDEX('%PW[0-9]%', PuniNaziv) -- 计算PW编码的长度(到下一个空格截止)
    ) AS NazivCentrale
FROM SifraArtikla

如果需要关联ArtikalUsluge表过滤数据,增加关联逻辑即可:

SELECT 
    a.ID,
    SUBSTRING(
        a.PuniNaziv,
        PATINDEX('%PW[0-9]%', a.PuniNaziv),
        CHARINDEX(' ', a.PuniNaziv, PATINDEX('%PW[0-9]%', a.PuniNaziv)) - PATINDEX('%PW[0-9]%', a.PuniNaziv)
    ) AS NazivCentrale
FROM SifraArtikla a
INNER JOIN ArtikalUsluge b ON a.ID = b.ArtikalID

方案2:硬编码映射(稳定性最高)

如果ID和PW编码的对应关系固定不会变,直接用CASE WHEN做映射,完全不受字符串格式变化影响:

SELECT 
    ID,
    CASE ID
        WHEN 1 THEN 'PW60'
        WHEN 2 THEN 'PW120'
        WHEN 3 THEN 'PW250'
    END AS NazivCentrale
FROM SifraArtikla

原有代码报错原因

  1. 变量@OznakaCentrale定义为NCHAR未指定长度,默认仅能存储1个字符,无法存储'PW%'
  2. SQL的相等判断运算符是=,不是==
  3. IF是SQL的全局流程控制语句,不能用于逐行数据的条件判断,逐行判断需使用CASE WHEN
  4. 关联的表名、字段名和你给出的表结构不一致,你给出的关联表名为ArtikalUsluge,关联字段为ArtikalID,代码中写的是ArtikliUslugeNaloga和Artikal1Id,会导致关联失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:54:02