如何 select 基于 SQL 服务器 2012 中分隔列的位置的值

How to select a value based on the position from a delimited column in SQL server 2012

我必须编写一个 select 查询以根据位置从逗号分隔的列中获取值。当我说位置时,逗号之间的每个值都被视为一个位置。

示例:

Source table 'alphabets' 有一列的值如下

第 1 列 abc,defg,hi,j,kl,mno,pqr,st,u,v,wx,yz

现在我必须 select 第 7 个位置值 'pqr' 作为我在 SQL Server 2012 中的输出。

我想出了一个临时解决方案来解决长度值一致的问题,但需要帮助解决 select 长度值不一致的问题。

谁能帮我解决这个问题?

提前致谢!!

你可以用逗号分割字符串:

;WITH alphabets(s)AS(
   SELECT 'abc,defg,hi,j,kl,mno,pqr,st,u,v,wx,yz'
)
SELECT l.* FROM alphabets AS a
CROSS APPLY(VALUES(CONVERT(XML,'<n>'+REPLACE(a.s,',','</n><n>')+'</n>')))c(x)
CROSS APPLY(SELECT ROW_NUMBER()OVER(ORDER BY GETDATE()) AS Pos,x.n.value('.','varchar(100)') AS ch FROM c.x.nodes('n')x(n)) l
Pos ch
1   abc
2   defg
3   hi
4   j
5   kl
6   mno
7   pqr
8   st
9   u
10  v
11  wx
12  yz

我尝试了下面的 sample.Which 给出第 7 个 row.Hope 的位置它解决了问题。

创建 table #alphabets ( 瓦尔 varchar(100) ) 插入#alphabets 价值观 ('abc'), ('defg'), ('hi'), ('j'), ('kl'), ('mno'), ('c'), ('st'), ('u'), ('v'), ('wx'), ('yz')

SELECT ROW_NUMBER() OVER(ORDER BY val) as ronumber,val into #temp1 From #alphabets

select * 来自 #temp1,其中 ronumber = 7