2017-08-31 6 views
1

Assez simple question, mais semble impossible d'obtenir une réponse.Chaîne fractionnée via une instruction select

Si j'ai ceci:

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

Y at-il une instruction select je peux écrire pour diviser la chaîne où le coma est, sans avoir à écrire une fonction?

Quelque chose comme:

SELECT SOME_SPLIT_LOGIC(@Agent) 

je voudrais qu'il revienne:

Column 
-------- 
2131235 
334225 

S'il vous plaît noter que je suis utiliser MS-SQL 2012

+0

Une fonction intégrée est disponible dans SQL Server 2016 (plus d'informations [ici] (https://docs.microsoft.com/en-us/sql/t- sql/functions/string-split-transact-sql)), mais dans Sql Server 2012, je crains que vous ayez à écrire votre propre fonction de partage – Andrea

+0

Effectuez une recherche Google pour "Jeff Moden DelimitedSplit8K". –

Répondre

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

Que diriez-vous:

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) 

Plus d'informations peuvent être trouvées ici: http://www.sqlservercentral.com/articles/Tally+Table/72993/