我有一个包含用户列表的表格,如下所示。
christopher.j.sansom
vinay.prabhakar
Guillaume.de.Miribel (Stage 2B); jean-marie.pierron (Stage 3B)
ian.notley; pavan.sethi
Ron.M.Barbeau
jason.angelos
jonathan.l.lange, ramesh.t.murti,
nicole.f.cohen
我们可以获得如下记录。需要将逗号分隔的记录作为新行返回。
christopher.j.sansom
vinay.prabhakar
Guillaume.de.Miribel
jean-marie.pierron
ian.notle
pavan.sethi
Ron.M.Barbeau
jason.angelos
jonathan.l.lange
ramesh.t.murti
nicole.f.cohen
答案 0 :(得分:1)
请在此处查看正则表达式:https://regex101.com/r/hD2mQ8/1
您可以使用此模式:
/(^[\w.-]+)|(?<=; |, )[\w.-]+/
使用全局和多行修饰符来捕获您需要的文本,但我不确定如何在不查看当前代码的情况下将每个文本返回到新行。
答案 1 :(得分:1)
要做到这一点,你需要一个字符串拆分器查询/功能 这是一个例子,还有其他方法可以做到。
With Normalize AS (
SELECT REPLACE(CONCAT(REPLACE(names, ',', ';'), ';'), ';;', ';') Names
FROM Table1
), Splitter AS (
Select names String
, WordCounter = 0
, NWordStart = 1
, NWordEnd = CHARINDEX(';', names)
, Word = CAST('' as nvarchar(255))
, WordNumber = LEN(names) - LEN(REPLACE(names, ';', '')) + 1
FROM Normalize
UNION ALL
SELECT s.String
, WordCounter = s.WordCounter + 1
, NWordStart = s.NWordEnd + 1
, NWordEnd = COALESCE(NULLIF(CHARINDEX(';', s.String, NWordEnd + 1), 0)
, LEN(s.String) + 1)
, Word = LTRIM(Cast(SubString(String, s.NWordStart, s.NWordEnd - s.NWordStart)
AS nvarchar(255)))
, WordNumber = s.WordNumber
FROM Splitter s
WHERE s.WordCounter + 1 <= s.WordNumber
)
SELECT LEFT(WORD , CHARINDEX(' ', CONCAT(Word, ' ')) - 1) Word
FROM Splitter
WHERE Word <> '';
CTE
标准化将所有分隔符字符更改为;
,以便为拆分设置单个分隔符。
CTE
拆分器使用;
作为分隔符将字符串拆分为块
主查询删除搜索名称和左括号之间空格的阶段信息。