我在文件名下面,如何在第一个,第二个和第三个下划线后面获取字符。例如,文件名如下:
DECLARE @FileName1 VARCHAR(200) = 'Test_173_M_2018_6_1'
DECLARE @FileName2 VARCHAR(200) = 'Test_21_M_2018_6_1'
我想要在sql server中
答案 0 :(得分:1)
如果要用列代替行。也许有点XML
我建议使用parsename(),但是如果您的职位超过4个,它将失败。
示例
DECLARE @FileName1 VARCHAR(200) = 'Test_173_M_2018_6_1'
Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)')))
,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)')))
From (Select Cast('<x>' + replace(@FileName1,'_','</x><x>')+'</x>' as xml) as xDim) as A
返回
Pos1 Pos2 Pos3 Pos4 Pos5 Pos6 Pos7 Pos8 Pos9
Test 173 M 2018 6 1 NULL NULL NULL
如果您想使用TVF,请看一下How to extract values from column and update result in another column