J'ai une colonne nommée nom dans une table appelée test qui a le nom complet et j'essaie d'extraire le prénom et le nom de famille. J'ai donc écrit quelque chose comme ceci: mais c'est me donner une erreur disant: p> msg 537, niveau 16, état 2, ligne 1
Paramètre de longueur non valide passé à la fonction de gauche ou de sous-chaîne. P> THTA's parce que j'ai des valeurs dans le nom comme: p> Nom: P> Hopkins P> Comment puis-je gérer ces? p> p>
3 Réponses :
Declare @t table ( [Name] varchar(100) )
insert into @t ( Name )
VALUES ( 'dennis hopper' ), ('keanu reaves'), ('thatgirl')
SELECT
[Name],
CHARINDEX(' ', [Name]),
CASE WHEN CHARINDEX(' ', [Name]) > 0 THEN
LEFT([Name],CHARINDEX(' ',[Name])-1)
ELSE
[Name]
END as FIRST_NAME,
CASE WHEN CHARINDEX(' ', [Name]) > 0 THEN
SUBSTRING([Name],CHARINDEX(' ',[Name])+1, ( LEN([Name]) - CHARINDEX(' ',[Name])+1) )
ELSE
NULL
END as LAST_NAME
FROM @t
Dans ce cas, je reçois prénom et nom de famille comme Hopkins, je veux le prénom comme Hopkins et Nom comme Null
Je l'ai eu, je viens de remplacer la partie d'autre dans le nom de famille avec NULL. Merci beaucoup
Le problème avec votre code d'origine est ici: si [nom] ne contient pas d'espace, Charindex renvoie 0. Vous soustrayez 1 et nourrissez-la dans la fonction de gauche. Lorsque le 2e paramètre à la fonction de gauche est -1, vous obtiendrez cette erreur. À mon avis, le moyen le plus simple de "résoudre" ce problème est de donner à la fonction Charindex quelque chose à trouver, comme ceci: p> maintenant ... Ce code ne peut pas échouer. P> Il vous suffit de faire ce seul endroit dans votre code d'origine, mais vous devez l'ajouter à la partie Last_Name également. Si vous ne le faites pas, vous obtiendrez des résultats incorrects (EventHough vous n'obtiendrez pas d'erreur). P> SELECT [Name],
LEFT([Name],CHARINDEX(' ',[Name] + ' ')-1) AS FIRST_NAME,
SUBSTRING([Name],CHARINDEX(' ',[Name] + ' ')+1,LEN([Name])) AS LAST_NAME
FROM Test
Nous pouvons également utiliser la fonction de localisation p>
Sélectionner Nom, À gauche (nom, localisez ('', nom) -1) comme nom_.name, Substrage (nom, localisez ('', nom) + 1, longueur (nom)) comme Last_Name Du test p>
Cette question concerne SQL Server, pas MySQL.