


Comment gérer les délimiteurs manquants lors du fractionnement de chaînes dans T-SQL ?
Jan 08, 2025 am 09:47 AMFréparation de chaînes T-SQL : résolution des délimiteurs manquants
Les données avec des délimiteurs incohérents nécessitent une gestion robuste des scénarios de délimiteurs manquants. Examinons un problème courant :
Imaginez une table ("MaTable") avec une colonne "Nom" stockant les noms au format FirstName/LastName
. Cependant, certaines entrées peuvent ne pas comporter le délimiteur « / » :
<code>FirstName---LastName John--------Smith Jane--------Doe Steve-------NULL -- Missing delimiter Bob---------Johnson</code>
Une approche naïve SUBSTRING
et CHARINDEX
comme celle-ci échoue lorsqu'un délimiteur est absent :
SELECT SUBSTRING(Name, 1, CHARINDEX('/', Name)-1) AS FirstName, SUBSTRING(Name, CHARINDEX('/', Name) + 1, 1000) AS LastName FROM MyTable;
L'erreur « Paramètre de longueur non valide transmis à la fonction LEFT ou SUBSTRING » se produit car CHARINDEX
renvoie 0 lorsque le délimiteur n'est pas trouvé, ce qui entraîne une longueur de sous-chaîne négative.
La solution : extraction conditionnelle de sous-chaînes
La solution implique une instruction CASE
pour déterminer conditionnellement la longueur de la sous-chaîne :
SELECT SUBSTRING(Name, 1, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) ELSE CHARINDEX('/', Name) - 1 END) AS FirstName, SUBSTRING(Name, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) + 1 ELSE CHARINDEX('/', Name) + 1 END, 1000) AS LastName FROM MyTable;
Cette requête affinée utilise CASE
pour gérer les deux scénarios :
-
Délimiteur absent (
CHARINDEX('/') = 0
) : La longueur de la sous-chaîne pourFirstName
devient la longueur entière de la chaîne (LEN(Name)
), et la sous-chaîneLastName
commence à une position un caractère au-delà de la fin de la chaîne (LEN(Name) 1
), renvoyant effectivementNULL
. -
Délimiteur présent : La logique
SUBSTRING
originale est appliquée.
Cette approche robuste garantit des résultats corrects quelle que soit la présence d'un délimiteur, évitant ainsi l'erreur « Paramètre de longueur invalide ».
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Quels sont les outils de GUI MySQL populaires (par exemple, MySQL Workbench, PhpMyAdmin)?
