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

Comment puis-je analyser efficacement les chaînes séparées par des virgules pour les clauses SQL WHERE ?

Mary-Kate Olsen
Libérer: 2025-01-09 14:12:40
original
570 Les gens l'ont consulté

How Can I Efficiently Parse Comma-Separated Strings for SQL WHERE Clauses?

Traitez efficacement les chaînes séparées par des virgules pour optimiser les requêtes SQL

Dans SQL Server, lors de l'utilisation de procédures stockées, il est souvent nécessaire d'analyser les chaînes séparées par des virgules dans des listes de valeurs à utiliser dans la clause WHERE. Cela permet un filtrage dynamique des données basé sur plusieurs critères.

Description du problème :

Votre procédure stockée reçoit en paramètre une chaîne séparée par des virgules, vous devez la convertir en une instruction de clause IN, par exemple :

<code class="language-sql">WHERE Account IN ('SA', 'A')</code>
Copier après la connexion

Bonnes pratiques :

Pour ce faire, vous pouvez utiliser une fonction définie par l'utilisateur (UDF) pour diviser une chaîne séparée par des virgules en valeurs individuelles. Voici un UDF efficace nommé f_split qui accomplit cette tâche :

<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>
Copier après la connexion

Utilisation :

Pour utiliser la fonction f_split, vous pouvez utiliser l'instruction suivante :

<code class="language-sql">SELECT *
FROM yourtable 
WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
Copier après la connexion

Comparaison des performances :

La fonction

f_split présente des avantages de performances significatifs par rapport aux méthodes de segmentation basées sur XML. Par exemple, sur un ensemble de données comportant 100 000 enregistrements :

  • Segmentation basée sur XML : 1 minute 21 secondes
  • f_splitFonction : 43 secondes

Conclusion :

L'utilisation de la fonction f_split fournit un moyen efficace et évolutif d'analyser des chaînes délimitées par des virgules à utiliser dans les clauses SQL WHERE. Il permet des requêtes flexibles basées sur plusieurs critères et améliore les performances des procédures stockées qui gèrent ces entrées.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal