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!