Maison >base de données >tutoriel mysql >Comment analyser efficacement les chaînes séparées par des virgules pour les clauses SQL IN ?

Comment analyser efficacement les chaînes séparées par des virgules pour les clauses SQL IN ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-09 14:16:40321parcourir

How to Efficiently Parse Comma-Separated Strings for SQL IN Clauses?

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 :

  • Performances exceptionnelles : Nettement plus rapide que les méthodes basées sur XML.
  • Réutilisabilité : Facilement adaptable à diverses applications.
  • Simplicité :Évite les manipulations complexes de chaînes.

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