从由“/”和“//”分隔的列中间提取特定值

问题描述 投票:0回答:1

我的表列之一存储的数据是这样的。有些值以单个“/”开头,有些以双“//”开头

/etc/data/env/source/sourcename1/filename1/file-arrivaltimestamp/file-processedtimestamp/file-archivedtimestamp
//etc/data/env/source/sourcename2/filename2/file-arrivaltimestamp/file-processedtimestamp/file-archivedtimestamp
//etc/data/env/source/sourcename3/filename3/file-arrivaltimestamp/file-processedtimestamp/file-archivedtimestamp
/etc/data/env/source/sourcename4/filename4/file-arrivaltimestamp/file-processedtimestamp/file-archivedtimestamp
/etc/data/env/source/sourcename5/filename5/file-arrivaltimestamp/file-processedtimestamp/file-archivedtimestamp

我需要从列中提取文件名的值。尝试过

charindex()
left()
功能但未能获得所需的值。

所需输出

filename1
filename2
filename3
filename4
filename5
sql-server t-sql
1个回答
0
投票

我尝试使用 string_split() 来做到这一点,但史诗般的失败。所以我使用 Jeff Moden 的 DelimitedSplit8K() 做到了,它取得了冠军:

WITH cteFiles(newfilepath)
AS
    (
        SELECT REPLACE(filepath,'//','/')
        FROM teest
    )
SELECT *
FROM cteFiles
CROSS APPLY Scratch.dbo.DelimitedSplit8K(newfilepath,'/') ca
WHERE itemNumber = 7;

输出: 文件名1 文件名2 文件名3 文件名4 文件名5

© www.soinside.com 2019 - 2024. All rights reserved.