Maison >base de données >tutoriel mysql >Comment convertir efficacement une chaîne séparée par des virgules en liste SQL IN ?

Comment convertir efficacement une chaîne séparée par des virgules en liste SQL IN ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-09 14:26:45315parcourir

How to Efficiently Convert a Comma-Separated String to an SQL IN List?

Convertir une chaîne séparée par des virgules en liste IN dans la clause SQL WHERE

Question :

Lorsque vous stockez une chaîne séparée par des virgules en tant que paramètre dans une procédure stockée, la tâche consiste à la convertir en la liste IN correcte dans la clause WHERE.

Meilleures pratiques :

Pour effectuer cette conversion efficacement, créez une fonction SQL Server personnalisée :

<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>

Utilisation :

Remplissez la clause WHERE avec l'instruction suivante :

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

Comparaison des performances :

Cette fonction offre des performances supérieures par rapport aux méthodes de segmentation basées sur XML. Utilisez un grand ensemble de données de test :

  • Temps de fractionnement XML : 1 minute et 21 secondes
  • La fonction f_split prend 43 secondes

Les différences de performances peuvent varier, mettant en évidence l'efficacité des fonctions de partage personnalisé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!

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