0
votes

T-SQL Supprimer tous les points mais gardez le dernier

J'ai une variable dans SQL comme le ci-dessous xxx

lorsque j'imprime @myvariable xxx

La sortie est comme ci-dessous

Mon nom. Est ibrahim. ET. Je suis. À la recherche de. Une solution. aa

C'est bien mais je veux maintenant supprimer tous les points, à l'exception du dernier point

Ma sortie attendue ressemble au dessous

La sortie est comme ci-dessous < / p>

Mon nom est Ibrahim et je cherche une solution. aa

Comment puis-je y parvenir, i Google mais incapable de trouver quoi que ce soit


5 commentaires

La chaîne aura-t-elle toujours un '.' à la fin ou pourrait-il être moyen?


ça peut être une corde moyenne


Eh bien, ce commentaire a changé pour être le contraire complet de ce que vous venez de dire ...


oui désolé je tape juste ça à la hâte, mon erreur


La chaîne d'échantillonnage que vous avez fournie est de plus de 50 caractères. alors tronque (ironiquement) au 'a.' est-ce intentionnel?


4 Réponses :


0
votes

Si le caractère . code> sera toujours à la fin, c'est aussi simple que:

DECLARE @MyVariable AS VARCHAR(50) = 'My Name. Is Ibrahim. AND. I am. Searching For. A. Solution. aa';

SELECT REPLACE(LEFT(V.MyString, LEN(MyString) - (CI.I - 1)),'.','') + RIGHT(V.MyString,CI.I)
FROM (VALUES(@MyVariable),('This.is.a.string'))V(MyString)
     CROSS APPLY (VALUES(NULLIF(CHARINDEX('.',REVERSE(V.MyString)),1)))CI(I);


0 commentaires

0
votes

Voici une option qui utilise simplement la manipulation de chaîne.

PRINT replace(left(@MyVariable, len(@MyVariable) - charindex(@FixFor, reverse(@MyVariable))), @FixFor, '') + substring(@MyVariable, len(@MyVariable) - charindex(@FixFor, reverse(@MyVariable)) + 1, 100)


0 commentaires

1
votes

et encore une autre option (plus simple, IMHO): xxx

Vous remplacez toutes les points de la partie de la chaîne avant le dernier point et concaténez-le à la partie de la chaîne de le dernier point à la fin.

fraudeur:

  • charindex ('.', inverse (@myvariable)) vous donne l'index du dernier point.
  • gauche (@myvariable, len (@myvariable) - charindex ('.', inverse (@myvariable))) vous donne la partie de la chaîne jusqu'au dernier point (inclus).
  • remplacer (à gauche (@myvariable, len (@myvariable) - charindex ('.', inverse (@myvariable))), '.' '' '') vous donne cette partie de la chaîne sans points.
  • droite (@myvariable, charindex ('.', inverse (@myvariable))) vous donne la dernière partie de la chaîne, y compris le dernier point.

    Si votre chaîne ne contient aucun point, il renvoie simplement la même chaîne.


0 commentaires

0
votes

Dans les trois étapes, vous pouvez obtenir le résultat souhaité. Première variable trouve l'emplacement du dernier point, Deuxième variable Retirez les points, sauf le dernier, Troisiable variable trouve la chaîne après le dernier point, et deux variables sont concaténées pour la sortie souhaitée.

DECLARE @MyVariable AS VARCHAR(100) = 'My Name. Is Ibrahim. AND. I am. Searching For. A. Solution. aa'
DECLARE @FirstDot as int =LEN(@MyVariable)-PATINDEX('%.%',REVERSE(@MyVariable))
DECLARE @RemoveDotsBeforeLastDot as varchar(100) =  REPLACE(SUBSTRING(@MyVariable,1,@FirstDot),'.',' ')
DECLARE @AfterLastDot as varchar(100) = SUBSTRING(@MyVariable,@FirstDot+1,LEN(@MyVariable))

select CONCAT(@RemoveDotsBeforeLastDot,@AfterLastDot)


0 commentaires