Maison >base de données >tutoriel mysql >Comment diviser des chaînes séparées par des virgules dans T-SQL ?

Comment diviser des chaînes séparées par des virgules dans T-SQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-23 08:47:13771parcourir

How to Split Comma-Separated Strings in T-SQL?

Fonction Simuler Split en T-SQL

Diviser les valeurs séparées par des virgules en lignes distinctes est une tâche courante en programmation. Dans T-SQL, il n'existe pas de fonction de fractionnement native, mais il existe plusieurs techniques pour obtenir des résultats similaires.

Une solution consiste à utiliser le traitement XML. En convertissant la chaîne délimitée par des virgules en un document XML, puis en utilisant XQuery pour extraire les valeurs, nous pouvons remplir le tableau avec ces valeurs individuelles :

<code class="language-sql">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)</code>

Une alternative consiste à utiliser une expression de table commune récursive (CTE) pour parcourir la chaîne et extraire les sous-chaînes :

<code class="language-sql">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</code>

De nombreuses autres façons de diviser des chaînes séparées par des virgules dans T-SQL peuvent être trouvées dans le lien de référence fourni dans cette réponse Stack Overflow : Comment diviser des chaînes séparées par des virgules ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn