如何在SQL Server中的第一个下划线,第二个下划线,第三个下划线之后获取字符

时间:2018-09-19 13:52:12

标签: sql-server

我在文件名下面,如何在第一个,第二个和第三个下划线后面获取字符。例如,文件名如下:

DECLARE @FileName1 VARCHAR(200) = 'Test_173_M_2018_6_1' 
DECLARE @FileName2 VARCHAR(200) = 'Test_21_M_2018_6_1'

我想要在sql server中

1 个答案:

答案 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