T-SQL scinde une chaîne basée sur délimiteur
J'ai des données que je souhaite partager basé sur un délimiteur qui peut ou ne peut pas exister.
De données, par exemple:
John/Smith
Jane/Doe
Steve
Bob/Johnson
J'utilise le code suivant pour fractionner ces données dans les noms et les prénoms:
SELECT SUBSTRING(myColumn, 1, CHARINDEX('/', myColumn)-1) AS FirstName,
SUBSTRING(myColumn, CHARINDEX('/', myColumn) + 1, 1000) AS LastName
FROM MyTable
Les résultats que je voudrais:
FirstName---LastName
John--------Smith
Jane--------Doe
Steve-------NULL
Bob---------Johnson
Ce code fonctionne très bien aussi longtemps que toutes les lignes ont prévus de délimiteur, mais d'erreur quand une ligne ne tient pas:
"Invalid length parameter passed to the LEFT or SUBSTRING function."
Comment ré-écrire cela fonctionne correctement?
Vous devez vous connecter pour publier un commentaire.
Peut-être cela va vous aider.
Pour ceux à la recherche de réponses pour SQL Server 2016+. Utiliser le haut-STRING_SPLIT fonction
Par exemple:
Référence: https://msdn.microsoft.com/en-nz/library/mt684588.aspx
Essayez de filtrer les lignes contenant des chaînes de caractères avec le séparateur et le travail sur celles seulement comme:
Ou
Je voulais juste donner une autre façon de découper une chaîne avec plusieurs séparateurs, dans le cas où vous utilisez une version de SQL Server sous 2016.
L'idée générale est de séparer tous les caractères de la chaîne, la détermination de la position de délimiteurs, puis obtenir des sous-chaînes par rapport à la délimiteurs. Voici un exemple:
Les exemples ci-dessus fonctionne parfaitement quand il y a un seul délimiteur, mais il n'est pas à l'échelle de plusieurs séparateurs. Notez que cela ne fonctionne que pour SQL Server 2016 et au-dessus.