首页 > 解决方案 > SQL:从存在多个分隔符的字符串中提取下一个字符

问题描述

Azure MSSQL 数据库

我有一列包含每个事务存储的值。该字符串最多可以包含 7 个值,以 . 分隔'-'

我需要能够提取在 3rd 之后存储的值'-'。问题是此列的长度(以及 3rd 之前的字符'-')可能会有所不同。

例如:

DIM VALUE
1. NHL--WA-S-MOSG-SER-
2. VDS----HAST-SER-
3. ---D---SER

标签: sqlazure-sql-database

解决方案


这绝不是最佳解决方案,但它适用于 SQL Server。

为测试目的添加了 TempTable。也许它会提示您从哪里开始。

编辑:添加了对string_split函数的引用(从 SQL Server 2016 开始工作)。

CREATE TABLE #tempStrings (
    VAL VARCHAR(30)
);

INSERT INTO #tempStrings VALUES ('NHL--WA-S-MOSG-SER-');
INSERT INTO #tempStrings VALUES ('VDS----HAST-SER-');
INSERT INTO #tempStrings VALUES ('---D---SER');
INSERT INTO #tempStrings VALUES ('A-V-D-C--SER');

SELECT 
    t.VAL,
    CASE t.PART WHEN '' THEN '-' ELSE t.PART END AS PART
FROM
    (SELECT
        t.VAL,
        ROW_NUMBER() OVER (PARTITION BY VAL ORDER BY (SELECT NULL)) AS IX,
        value AS PART
    FROM #tempStrings t
    CROSS APPLY string_split(VAL, '-')) t
WHERE t.IX = 4; --DASH COUNT + 1

DROP TABLE #tempStrings;

输出是...

VAL                  PART
---D---SER           D
A-V-D-C--SER         C
NHL--WA-S-MOSG-SER-  S
VDS----HAST-SER-     -

推荐阅读