Comment puis-je découper les loggings dans SQL Server 2005?

disons que j'ai une colonne Nom dans la tableA

Name jennifer Hughs Mike nadrotosky Arnold Woods Raj Jai Soni 

alors comment puis-je mettre ces résultats dans trois colonnes distinctes comme

 FirstName MiddleName LastName Jennifer Hughs . . . Raj Jai Soni 

J'ai essayé avec Subssortingng mais ne fonctionnait pas.

Eh bien, cela semble beaucoup plus facile que ça ne l'est vraiment – surtout si vous commencez à avoir des gens avec plusieurs prénoms et / ou prénoms.

Mon approche serait de créer une fonction stockée qui encapsule cette logique – il n'est vraiment pas si simple de l'épeler dans une instruction T-SQL en ligne.

Voici une première tentative – fonctionne aussi longtime que vous n'avez pas plus d'un seul prénom:

 CREATE FUNCTION dbo.SplitName(@InputName VARCHAR(200)) RETURNS @nameParts TABLE ( FirstName VARCHAR(100), MiddleName VARCHAR(100), LastName VARCHAR(100) ) AS BEGIN DECLARE @FirstSpace INT, @LastSpace INT SET @FirstSpace = CHARINDEX(' ', @InputName) SET @LastSpace = CHARINDEX(' ', @InputName, @FirstSpace+1) INSERT INTO @nameParts(FirstName, MiddleName, LastName) SELECT SUBSTRING(@InputName, 1, @FirstSpace), CASE @LastSpace WHEN 0 THEN CAST(NULL AS VARCHAR(100)) ELSE SUBSTRING(@InputName, @FirstSpace+1, @LastSpace - @FirstSpace) END, CASE @LastSpace WHEN 0 THEN SUBSTRING(@InputName, @FirstSpace+1, 999) ELSE SUBSTRING(@InputName, @LastSpace, 999) END RETURN END 

Si vous testez ceci avec des exemples de données, vous obtiendrez les résultats suivants:

 DECLARE @nameTable TABLE (NameValue VARCHAR(100)) INSERT INTO @nametable VALUES('Jennifer Hughes') INSERT INTO @nametable VALUES('Mike Nadrotosky') INSERT INTO @nametable VALUES('Arnold Woods') INSERT INTO @nametable VALUES('Raj Jai Soni') SELECT * FROM @nameTable CROSS APPLY dbo.SplitName(nameValue) 

et la sortie pour ce SELECT est:

 NameValue FirstName MiddleName LastName Jennifer Hughes Jennifer NULL Hughes Mike Nadrotosky Mike NULL Nadrotosky Arnold Woods Arnold NULL Woods Raj Jai Soni Raj Jai Soni 

La réponse @marc_s est la plus complète. Les quelques fois que j'ai dû faire cela, ils ont été des travaux ponctuels de type chargement de données. Si le vôtre est le même, je suggère fortement de le faire dans Excel!

  1. Copiez et collez la table de Management studio dans Excel
  2. Utiliser le text pour les colonnes
  3. Re-sortinger la ligne entière sur la colonne 3 pour get tous ceux qui n'ont pas de deuxième prénom en haut
  4. Sélectionnez tous ceux avec une colonne vide 3 et déplacez les valeurs de la colonne 2 vers la colonne 3
  5. Importez datatables dans la table SQL de destination

Pour ce faire dans T-SQL, je l'ai fait en utilisant la fonction de séparation de strings dans SQL Sharp . Cela donnera cependant finalement des résultats similaires à @marc_s, donc je ne vais pas y aller ici.