我在Notes字段中有一些值,这些值如下所示,其中abc表示不同的单词:
申请说明:VAR - abc abc abc abc abc
不幸的是,数据存储方式的设计非常糟糕,我需要为每个“Required Notes:“记录提取Note Type,还需要从最近到最早排序(字符串的最后一部分到字符串的第一部分)。
CREATE TABLE #TestData
(
ClientID int,
Notes varchar(8000)
)
insert into #TestData
(
ClientID,
Notes
)
select
1,
'Request Notes: VAR - abc abc abc abc abc'
union all
select
2,
'Request Notes: OZR - abc abc abc abc abc Request Notes: ACC - abc abc abc abc abc Request Notes: TYU - abc abc abc abc abc'
union all
select
3,
'Request Notes: TYU - abc abc abc abc abc Request Notes: VAR - abc abc abc abc abc'
这就是我期望上面例子的输出:
--Expected Output
Client ID Type Order
1 VAR 1
2 TYU 1
2 ACC 2
2 OZR 3
3 VAR 1
3 TYU 2
到目前为止,我已经完成了提取OZR的工作,但是我对如何获取其他的并将列表排序为上面的预期输出感到困惑。
DECLARE @Text varchar(500) = 'Request Notes: OZR - abc abc abc abc abc Request Notes: ACC - abc abc abc abc abc Request Notes: TYU - abc abc abc abc abc'
SELECT TRIM(REPLACE(REPLACE(SUBSTRING(@Text, CHARINDEX(':', @Text), CHARINDEX('-',@text) - CHARINDEX(':', @Text) + Len('-')),':',''),'-',''))
2条答案
按热度按时间7d7tgy0s1#
您可以使用 openjson 将数据提取为数组和过滤器:
示例Fiddle
jfewjypa2#
这是一个递归的CTE版本。它根据“Request Notes:“拆分字符串,然后执行左/右组合以提取3个字母的代码。它在构建订单时迭代订单。然后从CTE中进行选择,并只取有一些NotesRemainder的行: