问题
Fairly simple question, but seems impossibe to get an answer.
If I have this:
declare @Agent nvarchar(4000) = '2131235,334225';
Is there a select statement I can write to split the string where the coma is, WITHOUT having to write a function?
Something like:
SELECT SOME_SPLIT_LOGIC(@Agent)
I would like it to return:
Column
--------
2131235
334225
Please note I am use MS-SQL 2012
回答1:
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
回答2:
How about:
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)
More information can be found here: http://www.sqlservercentral.com/articles/Tally+Table/72993/
来源:https://stackoverflow.com/questions/45991269/split-string-via-select-statement