0
votes

Problème de sous-chaîne SQL - Suppression de certains caractères et de réétrudes

Je suis en difficulté pour que ce problème soit fait, essayant de transformer cette chaîne xxx

dans quelque chose comme xxx p> J'ai été Essayer d'utiliser la gauche et de remplacer, mais il ne peut toujours pas le faire correctement :( beaucoup apprécient votre aide merci!


1 commentaires

Il serait utile que vous puissiez mettre en évidence la requête que vous utilisez et la sortie que vous obtenez.


3 Réponses :


0
votes

Vous pouvez utiliser ce qui suit L'idée est

  • Tout d'abord, utilisez string_split pour diviser la chaîne par ',' li>
  • Deuxièmement, utilisez des objets pour remplacer les deux premiers caractères (1, 2. etc.) li>
  • Enfin, utilisez pour XML pour les concéder à nouveau li> ul>
    DECLARE @str VARCHAR(500)
    SET @str ='1. Create Event Flyer,3. Create Press Release,5. Promote - Social Media & Website'
    SELECT STUFF((
      SELECT  ' / ' + STUFF(value,1,2,'')  
      FROM STRING_SPLIT(@str, ',') 
      FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,3,'')
    


3 commentaires

Vous manquiez une parenthèse. :RÉ


Merci @Seanlange :)


@Ericz considère que: 1. string_split () ne garantit pas l'ordre des substrings et 2. Vous pouvez utiliser remplacer () pour changer , < / code> avec / .



1
votes
SELECT STRING_AGG(RIGHT(value,(LEN(value)-CHARINDEX(' ',value))) ,' / ')
FROM STRING_SPLIT('1. Create Event Flyer,3. Create Press Release,5. Promote - Social Media & Website',',')

0 commentaires

0
votes

Vous pouvez également utiliser CTE récursif:

declare @t varchar(500) = '1. Create Event Flyer,3. Create Press Release,5. Promote - Social Media & Website'

;With cte
as
(
    select @t as string,0  as n
    union all
    select
        cast(replace(string,concat(',', n, '. '), iif(n = 1, '', ' / ')) as varchar(500)),n+1
    from cte
    where n<9
)
select top 1 string from cte
order by n desc


0 commentaires