如何在sql server中拆分字符串并将其放在表中

时间:2014-08-29 20:35:18

标签: sql-server-2008

我的输入就像

(abcd@123, xyz@324, def@567)

我想要一个输出

col1   Col2
abcd   123
xyz    324
def    567

等等

第1列应该有abcdxyz,而第2列应该在不同的行中有123324,依此类推。字符串可以是任何大小。

谢谢

3 个答案:

答案 0 :(得分:1)

您需要使用CHARINDEX()SUBSTRING()函数来分割输入值。

答案 1 :(得分:1)

试试这个

SELECT LEFT('abcd@123', CHARINDEX('@', 'abcd@123')-1),
       RIGHT('abcd@123', CHARINDEX('@', 'abcd@123')-1) 

答案 2 :(得分:1)

你的实际问题是将一个复杂的String变成一个表格。 对于我在1年前找到一个程序的帮助,就是这样:

CREATE FUNCTION [dbo].[fnSplitString] (
@myString varchar(500),
@deliminator varchar(10))
RETURNS 
@ReturnTable TABLE (
[id] [int] IDENTITY(1,1) NOT NULL,
[part] [varchar](50) NULL
)
AS
BEGIN
    Declare @iSpaces int
    Declare @part varchar(50)

    Select @iSpaces = charindex(@deliminator,@myString,0)
    While @iSpaces > 0
    BEGIN
        Select @part = substring(@myString,0,charindex(@deliminator,@myString,0))

        Insert Into @ReturnTable(part)
        Select @part

        Select @myString = substring(@mystring,charindex(@deliminator,@myString,0)+ len(@deliminator),len(@myString) - charindex(' ',@myString,0))
        Select @iSpaces = charindex(@deliminator,@myString,0)
    END

    If len(@myString) > 0
        Insert Into @ReturnTable
        Select @myString
RETURN
END

创建此过程,您可以执行以下操作:

DECLARE @TestString varchar(50)
SET @TestString = 'abcd@123,xyz@324,def@567'
Select * from dbo.fnSplitString(@TestString, ',')

结果:

id|     part
1 |     abcd@123
2 |     xyz@324
3 |     def@567

这部分你可以和Leonardos一起回答:

SELECT 
LEFT(part, CHARINDEX('@', part)-1) As Col1,
RIGHT(part, LEN(part) - CHARINDEX('@', part)) As Col2
from dbo.fnSplitString(@TestString, ',')

让你的问题得到解决。

(小注意:该函数对空格几乎没有问题,所以请尽量避免使用它们)