簡體   English   中英

從 SQL Server 表中的帶連字符的字符串列中提取第 1 個第 2 個第 3 個值直到第 n 個值

[英]Extract 1st 2nd 3rd values till nth value from hyphenated string column in SQL Server table

表具有像12-43-5765-234-56-24-6456-234-678-9-0-0這樣的12-43-5765-234-56-24-6456-234-678-9-0-0帶連字符

我需要將第一個值作為單獨的列,將第二個值作為單獨的列,依此類推。

我是這樣試的。

DECLARE @S VARCHAR(MAX);
SET @S = '12-43-5765-234-56-24-6456-234-678-9-0-0'

SELECT SUBSTRING(@S, 0, CHARINDEX('-', @S)) AS first

上述查詢僅選擇第一個值,但如何從字符串中提取第 4 個和第 5 個值? 喜歡

12 as first,
43 as second,
5765 as third,
234 as fourth,
56 as fifth,
24 as sixth and so on..

如果你有一個最大的(或已知的)位置的數目,並且不想去動態

例子

DECLARE @S VARCHAR(MAX);
SET @S='12-43-5765-234-56-24-6456-234-678-9-0-0'


Select Pos1 = xDim.value('/x[1]','varchar(max)') --could change to desired datatype (int ?)
      ,Pos2 = xDim.value('/x[2]','varchar(max)') 
      ,Pos3 = xDim.value('/x[3]','varchar(max)')
      ,Pos4 = xDim.value('/x[4]','varchar(max)')
      ,Pos5 = xDim.value('/x[5]','varchar(max)')
      ,Pos6 = xDim.value('/x[6]','varchar(max)')
      ,Pos7 = xDim.value('/x[7]','varchar(max)')
      ,Pos8 = xDim.value('/x[8]','varchar(max)')
      ,Pos9 = xDim.value('/x[9]','varchar(max)')
      ,Pos10= xDim.value('/x[10]','varchar(max)')
      ,Pos11= xDim.value('/x[11]','varchar(max)')
      ,Pos12= xDim.value('/x[12]','varchar(max)')
      ,Pos13= xDim.value('/x[13]','varchar(max)')
 From  (Select Cast('<x>' + replace(@S,'-','</x><x>')+'</x>' as xml) as xDim) as A 

退貨

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM