双子串

Double substring

在我的 table 中,我有一列包含两个 ID:

示例:

Comment
Internal message ID: 7878 External message ID: 788CBNCGD9_3_5_87BFHJD
Internal message ID: 90278 External message ID: 788H2692029_3_5_8890ZG

我想获得两列:内部 ID 和外部 ID

Internal ID External ID
7878 788CBNCGD9_3_5_87BFHJD
90278 788H2692029_3_5_8890ZG

我一直在考虑使用子字符串,但我不知道如何。

有人可以帮助我吗?

老实说,我建议在源代码中修复您的设计,而不是将实质上分隔的数据插入到您随后要使用的数据库中。

然而,根据我们拥有的示例数据,您可以使用 SQL 服务器的基本字符串操作来实现此目的:

SELECT SUBSTRING(V.Comment,CI1.I,CI2.I-CI1.I),
       SUBSTRING(V.Comment,CI3.I, ISNULL(NULLIF(CI4.I,0),LEN(V.Comment)+1)  - CI3.I)
FROM (VALUES('Internal message ID: 7878 External message ID: 788CBNCGD9_3_5_87BFHJD'),
            ('Internal message ID: 90278 External message ID: 788H2692029_3_5_8890ZG'))V(Comment)
     CROSS APPLY (VALUES(CHARINDEX(':',V.Comment)+2))CI1(I)
     CROSS APPLY (VALUES(CHARINDEX(' ',V.Comment,CI1.I)))CI2(I)
     CROSS APPLY (VALUES(CHARINDEX(':',V.Comment,CI2.I)+2))CI3(I)
     CROSS APPLY (VALUES(CHARINDEX(' ',V.Comment,CI3.I)))CI4(I);