如何 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
我必须编写一个 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