Maison >base de données >tutoriel mysql >Comment analyser efficacement les chaînes séparées par des virgules pour les clauses SQL IN ?
Gestion des chaînes séparées par des virgules dans les requêtes SQL
De nombreuses opérations de base de données nécessitent des paramètres d'entrée sous forme de listes. Lorsque ces listes sont fournies sous forme de chaînes séparées par des virgules, leur conversion dans un format compatible SQL est cruciale.
Le défi :
Considérons une procédure stockée recevant une chaîne séparée par des virgules comme celle-ci :
<code class="language-sql">DECLARE @Account AS VARCHAR(200) SET @Account = 'SA,A'</code>
Le but est de transformer cette chaîne en une clause SQL IN
utilisable :
<code class="language-sql">WHERE Account IN ('SA', 'A')</code>
Une solution performante :
Une fonction définie par l'utilisateur offre l'approche la plus efficace. Cette fonction divise la chaîne séparée par des virgules en un tableau :
<code class="language-sql">CREATE function [dbo].[f_split] ( @param nvarchar(max), @delimiter char(1) ) returns @t table (val nvarchar(max), seq int) as begin set @param += @delimiter ;with a as ( select cast(1 as bigint) f, charindex(@delimiter, @param) t, 1 seq union all select t + 1, charindex(@delimiter, @param, t + 1), seq + 1 from a where charindex(@delimiter, @param, t + 1) > 0 ) insert @t select substring(@param, f, t - f), seq from a option (maxrecursion 0) return end</code>
Cette fonction est ensuite utilisée au sein de la requête SQL :
<code class="language-sql">SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
Pourquoi cette méthode est supérieure :
Par rapport aux alternatives telles que l'analyse XML, cette fonction fournit :
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!