如何在SQL Server中拆分字符串

21

我有以下输入:

Data
-----
A,10
A,20
A,30
B,23
B,45

期望输出:

col1  Col2
----  -----
A      10
A      20
A      30
B      23
B      45

我该如何分割字符串以获得所需的输出?

5个回答

44
SELECT substring(data, 1, CHARINDEX(',',data)-1) col1,
substring(data, CHARINDEX(',',data)+1, LEN(data)) col2
FROM table

1
更多信息 CHARINDEX http://msdn.microsoft.com/zh-cn/library/ms186323.aspx SUBSTRING http://msdn.microsoft.com/zh-cn/library/ms187748.aspx - niktrs
@nikrts 抱歉,我发布了几乎与你相同的答案,但我没有抄袭你的。 - rahularyansharma
这个解决方案没有问题,使用“left”、“right+reverse”和新逻辑代替“substring”会更合适吧? - t-clausen.dk
我假设长度可以是可变的,例如AB,51,在任何其他情况下,我同意@vlad的看法。 - niktrs
检查 if (CHARINDEX(',', data) > 0),以避免在没有分隔符的情况下出现错误。 - live-love

5
我知道这些点已经给出了,但还是要发帖,因为我认为它更好一些。
DECLARE @t TABLE (DATA VARCHAR(20))

INSERT @t VALUES ('A,10');INSERT @t VALUES ('AB,101');INSERT @t VALUES ('ABC,1011')

SELECT LEFT(DATA, CHARINDEX(',',data) - 1) col1, 
RIGHT(DATA, LEN(DATA) - CHARINDEX(',', data)) col2
FROM @t

3

如果第一列的值始终只有一个字符长,而第二列的值始终为2,则可以使用SQL LeftSQL Right函数:

SELECT LEFT(data, 1) col1, RIGHT(data, 2) col2
FROM <table_name>

2
declare @string nvarchar(50)
set @string='AA,12'

select substring(@string,1,(charindex(',',@string)-1) ) as col1 
, substring(@string,(charindex(',',@string)+1),len(@string) ) as col2![my sql server image which i tried.][1]

0

它非常简单,您可以通过以下查询获取:

SELECT LEFT(DATA, CHARINDEX(',',DATA)-1) col1,RIGHT(Data,LEN(DATA)-(CHARINDEX(',',DATA))) col2 from Table

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接