sql >> Database >  >> RDS >> Sqlserver

Gesplitste functie-equivalent in T-SQL?

Probeer dit

DECLARE @xml xml, @str varchar(100), @delimiter varchar(10)
SET @str = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15'
SET @delimiter = ','
SET @xml = cast(('<X>'+replace(@str, @delimiter, '</X><X>')+'</X>') as xml)
SELECT C.value('.', 'varchar(10)') as value FROM @xml.nodes('X') as X(C)

OF

DECLARE @str varchar(100), @delimiter varchar(10)
SET @str = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15'
SET @delimiter = ','
;WITH cte AS
(
    SELECT 0 a, 1 b
    UNION ALL
    SELECT b, CHARINDEX(@delimiter, @str, b) + LEN(@delimiter)
    FROM CTE
    WHERE b > a
)
SELECT SUBSTRING(@str, a,
CASE WHEN b > LEN(@delimiter) 
    THEN b - a - LEN(@delimiter) 
    ELSE LEN(@str) - a + 1 END) value      
FROM cte WHERE a > 0

Hier vindt u nog veel meer manieren om hetzelfde te doen. Hoe een door komma's gescheiden tekenreeks te splitsen?



  1. Verbeteringen in voortgangsrapportage in PostgreSQL 12

  2. Oracle Verwijder rijen die overeenkomen met meerdere waarden

  3. Hoe te voorkomen dat de eerste rij in de tabel wordt verwijderd (PostgreSQL)?

  4. Fix "ERROR 1222 (21000):de gebruikte SELECT-instructies hebben een ander aantal kolommen" bij gebruik van UNION in MySQL