我的表列之一存储的数据是这样的。有些值以单个“/”开头,有些以双“//”开头
/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
我尝试使用 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