Maison >base de données >tutoriel mysql >Comment diviser en toute sécurité des chaînes dans T-SQL à l'aide de délimiteurs ?

Comment diviser en toute sécurité des chaînes dans T-SQL à l'aide de délimiteurs ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-08 09:52:41312parcourir

How to Safely Split Strings in T-SQL Using Delimiters?

Chaîne divisée en fonction du délimiteur en T-SQL

Question :

En SQL, l'utilisation de SUBSTRING pour diviser une chaîne en fonction d'un délimiteur peut provoquer une erreur lorsque le délimiteur n'existe pas. Le code ci-dessous le démontre :

<code class="language-sql">SELECT SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn)-1) AS FirstName,
       SUBSTRING(myColumn, CHARINDEX('/', myColumn) + 1, 1000) AS LastName
FROM   MyTable</code>

Lorsqu'une ligne sans délimiteur est rencontrée, l'erreur est générée : "L'argument de longueur passé à la fonction LEFT ou SUBSTRING n'est pas valide

."

Solution :

Pour résoudre ce problème, vous pouvez utiliser l'instruction CASE dans la fonction SUBSTRING comme suit :

<code class="language-sql">SELECT SUBSTRING(myColumn, 1, CASE CHARINDEX('/', myColumn)
            WHEN 0
                THEN LEN(myColumn)
            ELSE CHARINDEX('/', myColumn) - 1
            END) AS FirstName
    ,SUBSTRING(myColumn, CASE CHARINDEX('/', myColumn)
            WHEN 0
                THEN LEN(myColumn) + 1
            ELSE CHARINDEX('/', myColumn) + 1
            END, 1000) AS LastName
FROM MyTable</code>

Ce code mis à jour utilise CHARINDEX pour évaluer la position du délimiteur. Si le délimiteur n'est pas trouvé (CHARINDEX renvoie 0), l'instruction CASE utilise la longueur de la chaîne pour garantir que la chaîne entière est traitée comme un nom. Si un délimiteur est présent, il calcule la position du premier caractère après le délimiteur comme index de départ du nom de famille.

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