提问人:GreyFox9881 提问时间:9/22/2023 最后编辑:AbraGreyFox9881 更新时间:9/23/2023 访问量:65
检索两个分隔符之间的文本
Retrieve text between two delimiters
问:
我的文本采用以下命名约定的格式:。我正在尝试提取块。我试图使用 and 函数,但我是 SQL 的新手,仍然不了解它们的细微差别。还想知道是否可以复制这些结果以检索 text5 块。任何见解将不胜感激。ab123_text1_text2_text3_text4_text5_.xlsx
"**text4**"
substring
charindex
我尝试使用以下代码来提取文本,但我收到的不是我想要的“text3”块。以下是我正在使用的代码:
SELECT
SUBSTRING(FILENAME,
CHARINDEX('_',FILENAME,CHARINDEX('_',FILENAME) + 1) +1,
CHARINDEX('_',FILENAME,CHARINDEX('_',FILENAME,CHARINDEX('_',FILENAME) +1)+1) -
CHARINDEX('_',FILENAME,CHARINDEX('_',FILENAME)+1)-1) AS 'SOMETHING'
FROM mytable
如果代码根据需要工作,我的结果应如下所示
Results Column1:
**Text4** block
答:
1赞
John Cappelletti
9/22/2023
#1
如果是 2016+,则可以使用一点 JSON。
如果<2016,则还有XML方法
例
Declare @YourTable table (SomeCol varchar(100))
Insert Into @YourTable values
('ab123_text1_text2_text3_text4_text5_.xlsx.')
Select A.SomeCol
, Pos4 = JSON_VALUE(JS,'$[4]')
From @YourTable A
Cross Apply (values ('["'+replace(string_escape([SomeCol],'json'),'_','","')+'"]') ) B(JS)
结果
SomeCol Pos4
ab123_text1_text2_text3_text4_text5_.xlsx. text4
评论
0赞
Sean Lange
9/22/2023
使用 2022 或 Azure 会更容易,您可以在其中将序号位置添加到STRING_SPLIT。select x.value from @YourTable t cross apply string_split(t.SomeCol, '_', 1) x where x.ordinal = 5
0赞
John Cappelletti
9/22/2023
@SeanLange 非常正确。一直不明白为什么在引入序数时省略了序数string_split:)
1赞
Sean Lange
9/22/2023
我完全同意。这是一个如此巨大的波动,当它被释放时,这是一个失误。
评论
WITH INLINE = ON
_