如何根据SQL Server 2012中分隔列的位置选择值

时间:2017-11-27 19:52:02

标签: sql sql-server sql-server-2012 msbi

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

示例:

源表'alphabets'有一列,其值如下

column1的 ABC,DEFG,喜,J,KL,MNO,PQR,ST,U,V,WX,YZ

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

我已经提出了一致长度值的临时解决方案,但需要帮助来选择不一致的长度值。

在这种情况下,有人可以帮助我吗?

先谢谢!!

2 个答案:

答案 0 :(得分:1)

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

;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

答案 1 :(得分:0)

我尝试了以下示例。它给出了第7行的位置。希望它能解决问题。

创建表#alphabets (  val varchar(100) ) 插入#alphabets 值 (&#39; ABC&#39), (&#39; DEFG&#39), (&#39;喜&#39), (&#39; J&#39), (&#39; KL&#39), (&#39; MNO&#39), (&#39; C&#39), (&#39; ST&#39), (&#39; U&#39), (&#39; V&#39), (&#39; WX&#39), (&#39; YZ&#39)

SELECT ROW_NUMBER()OVER(ORDER BY val)为ronumber,val为#temp1来自#alphabets

从#temp1中选择*,其中ronumber = 7