8
votes

Split String sur une première occurrence de caractère / délimiteur

Je cherche toute la matinée pour cela.

Ma connaissance du serveur SQL n'est pas excellente, et je suis hors de réponses. P>

Exemples concrets sont: City-of -Style code> ou Part1-part2 code>. P>

J'ai besoin de diviser ces exemples en City code> et de style code > et part1 code> et Part2 code>. p>

J'ai compris ce petit morceau de code, mais il bascule Part1 et Part2 si la chaîne contient un "-" . P>

PARSENAME(REPLACE('sample-string', '-', '.'), 1))


0 commentaires

4 Réponses :


30
votes

Si je comprends bien, cela fera le travail; Cliquez ici pour le violon xxx


0 commentaires

2
votes

S'il n'y a pas de tirets dans la chaîne, vous obtenez un blanc. L'extrait ci-dessous vous donne la première partie s'il y a un tiret, sinon la chaîne entière.

DECLARE @TextIn VARCHAR(50)= 'City-Of-Style'
DECLARE @TextOut VARCHAR(500)
SELECT CASE WHEN CHARINDEX('-',@TextIn)>0 THEN SUBSTRING(@TextIn,0,CHARINDEX('-',@TextIn,0)) ELSE @TextIn END 


0 commentaires

2
votes

en SQL, vous pouvez utiliser la fonction split_part .

E.g. Cast (Split_Part (colonne, '-', 1) comme texte) comme nouveau_column

Entrée: King-Adfad-Adfadd
Sortie: roi


1 commentaires

SQL Server V14 Split_Part n'est pas disponible. "Pas une fonction intégrée"



0
votes

Construire sur les réponses précédentes, j'offre une solution - qui fournit à la fois les premiers et les derniers éléments. Si leur n'est pas un délimiteur trouvé, le dernier élément est vide.

DECLARE 
@del nvarchar(1) = '-',
@firstPart nvarchar(100),
@lastPart nvarchar(100),
@TextIn nvarchar(20) = 'City-Of-Style'
SELECT @firstPart = (CASE WHEN CHARINDEX(@del,@TextIn)>0 THEN SUBSTRING(@TextIn,0,CHARINDEX(@del,@TextIn,0)) ELSE @TextIn END),
@lastPart = (CASE WHEN CHARINDEX(@del,@TextIn)>0 THEN SUBSTRING(@TextIn,CHARINDEX(@del,@TextIn,0)+1,LEN(@TextIn)) ELSE '' END)

select @firstPart, @lastPart


0 commentaires