仅提取字符串SQL Server中的指定数据

nbysray5  于 2023-02-07  发布在  SQL Server
关注(0)|答案(1)|浏览(146)

我在一个表中有一个评论列,它有多个字符串格式如下,
示例字符串:

Reviews_Column_Data [INPUT]
'05012:000000:  :0:00000000|00647:000000:  :0:00000000|00283:000000:  :0:00000000|'
'05012:000000:  :0:00000000|00025:000000:  :0:00000000|00647:000000:  :0:00000000|'
'05012:000000:  :0:00000000|02095:000000:  :0:00000000|00647:000000:  :0:00000000|'
'05012:000000:  :0:00000000|00647:000000:  :0:00000000|' 
'05081:023931:DF:9:20230111|00604:023931:XX:9:20230111|02470:023931:XX:9:20230111|00655:023931:XX:9:20230111|00464:023931:XX:9:20230111|02130:023931:XX:9:20230111|'
'05081:023931:DF:9:20230131|02229:023931:XX:9:20230131|02130:023931:XX:9:20230131|00692:023931:XX:9:20230131|02170:023931:XX:9:20230131|05084:000000:  :0:00000000|00647:000000:  :0:00000000|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             '

我需要提取应用程序表中的审查在下面的格式...

Application_Review_Column_Data [OUTPUT]

'05012,00647,00283'
'05012,00025,00647'
'05012,02095,00647'
'05012,00647', 
'05081,00604,02470,00655,00464,02130' 
'05081,02229,02130,00692,02170,05084,00647'

查找评论的关键点是,字符串的起点和符号的每个终点"|"和立即":"
我已经尝试了下面的代码,但它没有工作

DROP TABLE IF EXISTS #Temp_Tbl
 Create table #Temp_Tbl (Comments varchar(500));

 INSERT INTO #Temp_Tbl
 VALUES('05012:000000:  :0:00000000|00647:000000:  :0:00000000|00283:000000:  :0:00000000|'),
 ('05012:000000:  :0:00000000|00025:000000:  :0:00000000|00647:000000:  :0:00000000|'),
 ('05012:000000:  :0:00000000|02095:000000:  :0:00000000|00647:000000:  :0:00000000|'),
 ('05081:023931:DF:9:20230131|02229:023931:XX:9:20230131|02130:023931:XX:9:20230131|00692:023931:XX:9:20230131|02170:023931:XX:9:20230131|')
eivnm1vs

eivnm1vs1#

正如我所评论的,使用string_split|上进行拆分,然后使用charindex()和left()提取所需的字符串,最后使用string_agg()将其连接回来

select Comments, 
        string_agg(case when p > 0 then left(c.value, p - 1) end, ',')
 from   #Temp_Tbl t
        cross apply string_split(Comments, '|') c
        cross apply (select p = charindex(':', c.value) ) p
group by Comments

相关问题