2017-08-31 133 views
1

非常简单的问题,但似乎难以得到答案。通过select语句拆分字符串

如果我有这样的:

declare @Agent nvarchar(4000) = '2131235,334225'; 

是否有一个select语句我可以写分裂在昏迷是字符串,而无需编写一个函数?

喜欢的东西:

SELECT SOME_SPLIT_LOGIC(@Agent) 

我想它返回:

Column 
-------- 
2131235 
334225 

请注意我用MS-SQL 2012

+0

SQL Server 2016中提供了一个内置函数(更多信息[here](https://docs.microsoft.com/en-us/sql/t- sql/functions/string-split-transact-sql)),但在Sql Server 2012中,我担心你必须编写自己的分割函数 – Andrea

+0

做一个Google搜索“Jeff Moden DelimitedSplit8K”。 –

回答

0
DECLARE @LeftPart TABLE 
(Agent int 
) 

DECLARE @RightPart TABLE 
(Agent1 int 
) 

declare @Agent nvarchar(4000) = '2131235,334225'; 

INSERT INTO @LeftPart 
SELECT LEFT(@Agent,7) 

INSERT INTO @RightPart 
SELECT RIGHT(@Agent,6) 

SELECT * INTO #Temp 
FROM 
(
SELECT * FROM @LeftPart 
UNION ALL 
SELECT * FROM @RightPart 
)A 

SELECT * FROM #Temp 
0

如何:

DECLARE @Agent VARCHAR(4000) = '2131235,334225' 
DECLARE @Delimiter VARCHAR(1) = ',' 

;WITH CTE 
AS 
(
    SELECT 1 AS ID 
    UNION ALL 
    SELECT ID + 1 FROM CTE 
    WHERE ID < 4000 
) 

SELECT 
    SUBSTRING(@Agent, t.ID, CHARINDEX(@Delimiter, @Agent + @Delimiter, t.ID) - t.ID) AS Agent 
FROM CTE t 
WHERE t.ID <= DATALENGTH(@Agent)+1 
    AND SUBSTRING(@Delimiter + @Agent, t.ID, 1) = @Delimiter 
OPTION (MAXRECURSION 4000) 

更多信息可以在这里找到:http://www.sqlservercentral.com/articles/Tally+Table/72993/