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

SQL Server中拆分PIDS列至GID与PACKAGEID列的技术求助

拆分SQL Server表中PIDS列的实现方案

我的SQL Server表中有一列PIDS,数据示例如下:

PIDs
GID: 2672, PACKAGEID: 91290
PACKAGEID: 130116, GID: 7d78b
GID: 09e541, PACKAGEID: 17105
GID: 14e3ba, PACKAGEID: 80017
PACKAGEID: 730829, GID: a871c
PACKAGEID: 1009409, GID: c8b2

需要将PIDS列拆分为GID和PACKAGEID两列,支持以下两种输出格式:

格式一:仅保留ID值

GIDPACKAGEID
267291290
7d78b130116
09e54117105
14e3ba80017
a871c730829
c8b21009409

实现SQL

SELECT
    -- 提取GID的纯值
    TRIM(SUBSTRING(PIDS, 
                   CHARINDEX('GID:', PIDS) + 4, 
                   CHARINDEX(',', PIDS, CHARINDEX('GID:', PIDS)) - CHARINDEX('GID:', PIDS) - 4)) AS GID,
    -- 提取PACKAGEID的纯值
    TRIM(SUBSTRING(PIDS, 
                   CHARINDEX('PACKAGEID:', PIDS) + 10, 
                   CASE 
                       WHEN CHARINDEX(',', PIDS, CHARINDEX('PACKAGEID:', PIDS)) > 0 
                       THEN CHARINDEX(',', PIDS, CHARINDEX('PACKAGEID:', PIDS)) - CHARINDEX('PACKAGEID:', PIDS) - 10 
                       ELSE LEN(PIDS) - CHARINDEX('PACKAGEID:', PIDS) - 9 
                   END)) AS PACKAGEID
FROM YourTableName;

说明:通过CHARINDEX定位关键词位置,SUBSTRING截取对应片段,TRIM去除多余空格,兼容GID和PACKAGEID顺序不固定的情况,以及最后一个字段无逗号的场景。

格式二:保留前缀(如GID:xxxx)

GIDPACKAGEID
GID:2672PACKAGEID:91290
GID:7d78bPACKAGEID:130116
GID:09e541PACKAGEID:17105
GID:14e3baPACKAGEID:80017
GID:a871cPACKAGEID:730829
GID:c8b2PACKAGEID:1009409

实现SQL(方法一:拼接前缀)

SELECT
    'GID:' + TRIM(SUBSTRING(PIDS, 
                   CHARINDEX('GID:', PIDS) + 4, 
                   CHARINDEX(',', PIDS, CHARINDEX('GID:', PIDS)) - CHARINDEX('GID:', PIDS) - 4)) AS GID,
    'PACKAGEID:' + TRIM(SUBSTRING(PIDS, 
                   CHARINDEX('PACKAGEID:', PIDS) + 10, 
                   CASE 
                       WHEN CHARINDEX(',', PIDS, CHARINDEX('PACKAGEID:', PIDS)) > 0 
                       THEN CHARINDEX(',', PIDS, CHARINDEX('PACKAGEID:', PIDS)) - CHARINDEX('PACKAGEID:', PIDS) - 10 
                       ELSE LEN(PIDS) - CHARINDEX('PACKAGEID:', PIDS) - 9 
                   END)) AS PACKAGEID
FROM YourTableName;

实现SQL(方法二:直接截取带前缀的片段)

SELECT
    TRIM(SUBSTRING(PIDS, CHARINDEX('GID:', PIDS), 
                   CASE 
                       WHEN CHARINDEX(',', PIDS, CHARINDEX('GID:', PIDS)) > 0 
                       THEN CHARINDEX(',', PIDS, CHARINDEX('GID:', PIDS)) - CHARINDEX('GID:', PIDS) 
                       ELSE LEN(PIDS) - CHARINDEX('GID:', PIDS) + 1 
                   END)) AS GID,
    TRIM(SUBSTRING(PIDS, CHARINDEX('PACKAGEID:', PIDS), 
                   CASE 
                       WHEN CHARINDEX(',', PIDS, CHARINDEX('PACKAGEID:', PIDS)) > 0 
                       THEN CHARINDEX(',', PIDS, CHARINDEX('PACKAGEID:', PIDS)) - CHARINDEX('PACKAGEID:', PIDS) 
                       ELSE LEN(PIDS) - CHARINDEX('PACKAGEID:', PIDS) + 1 
                   END)) AS PACKAGEID
FROM YourTableName;

说明:方法二直接从关键词(GID:/PACKAGEID:)开始截取到逗号或结尾,再去除空格,更简洁地保留带前缀的格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:17:33