1
votes

Fonction de remplacement combinée avec ltrim et rtrim

Quelqu'un peut-il m'aider s'il vous plaît à comprendre le code suivant:

REPLACE(LTRIM(RTRIM(dbo.UFN_SEPARATES_COLUMNS(CompletionDetails, 3, ','))), '.', '') AS BuildRequestID,

Est-ce qu'il dit supprimer tous les espaces de fin et de début, puis remplacer 3 par une virgule. Ensuite, s'il y a . , remplacez-le par '' ?


6 commentaires

Qu'est-ce que dbo.x_COLUMNS (CompletionDetails, 3, ',') ? Quoi que ce soit qui crache, vous coupez alors tout espace blanc à chaque extrémité avec votre LTRIM (RTRIM ()) Ensuite, vous remplacez tous les points '.' par rien < code> '' avec cette fonction REPLACE (, '.', '') . Encore une fois, nous ne savons pas ce que fait dbo.x_COLUMNS (CompletionDetails, 3, ',') . Cela semble être une fonction personnalisée dans votre système, vous devez donc nous le dire.


@JNevill, voici ce que j'ai: ... (dbo.UFN_SEPARATES_COLUMNS (CompletionDetails, 3, ',') .... Je ne sais pas ce qu'est dbo.UFN_SEPARATES_COLUMNS!


Google dit que UFN_SEPARATES_COLUMNS () vient d'ici: social.technet.microsoft.com/wiki/contents/articles/...


@JoelCoehoorn - vous avez utilisé google - c'est de la triche, vous êtes censé deviner.


@Hogan J'ai utilisé google après . La question d'origine avait un nom différent pour la fonction qui ne montre aucun résultat significatif.


@JoelCoehoorn - c'était une blague. Veuillez excuser mon mauvais goût.


4 Réponses :


0
votes

Le code coupe les espaces de début et de fin via les fonctions LTRIM () et RTRIM () de tout ce qui est renvoyé par la fonction dbo.x_COLUMNS < / code> ... c'est-à-dire dbo.x_COLUMNS (CompletionDetails, 3, ',') . LTRIM est à gauche, RTRIM est à droite.

Il remplace alors toutes les périodes (. ) par rien via la fonction REPLACE () .

Donc, en résumé, il supprime tous les points de la chaîne et les espaces de début et de fin.


0 commentaires

2
votes

Il ne remplace à aucun moment 3 par , .

Nous pouvons faciliter tout cela en formatant l'expression complète pour qu'elle couvre plusieurs lignes:

dbo.UFN_SEPARATES_COLUMNS(CompletionDetails, 3, ',')

Les expressions comme celle-ci doivent être lues de l'intérieur. Nous commençons donc par cette partie la plus interne:

REPLACE(
    LTRIM(RTRIM(
        dbo.UFN_SEPARATES_COLUMNS(CompletionDetails, 3, ',')
    )) 
    ,'.', ''
) AS BuildRequestID,

Ceci UFN_SEPARATES_COLUMNS () La fonction ne fait pas partie de Sql Server , mais a été ajouté par un membre de votre organisation ou dans le cadre du progiciel du fournisseur pour la base de données que vous consultez. Mais je suis confiant sur la base des inférences et du lien (trouvé via Google), il traitera CompletionDetails comme du texte délimité, où le délimiteur est une virgule (basé sur le 3ème ',' code>) et renvoie le 3ème champ (basé sur le 2ème argument 3 , où le comptage commence à 1 au lieu de 0). Comme le font les analyseurs CSV, celui-ci est particulièrement naïf, alors faites très attention à ce que vous en attendez.

Ensuite, nous utilisons LTRIM () et RTRIM () code> pour supprimer les espaces de début et de fin du champ. Tous les espaces blancs ne sont pas supprimés; seulement des caractères d'espace. Les onglets, les sauts de ligne, etc. ne sont pas coupés. Sql Server 2017 a un nouveau TRIM () fonction qui peut gérer des jeux de caractères plus larges et faire les deux côtés de la chaîne en un seul appel.

Le code utilise alors le Fonction REPLACE () pour supprimer tous les caractères . du résultat (les remplace par une chaîne vide).


1 commentaires

Merci @Joel Coehoorn



0
votes

supprimez tous les espaces de fin et de début, puis remplacez 3 par une virgule. Ensuite, s'il y en a un, remplacez-le par ''

Non, ça ne dit pas ça.
Mais ceci fait:

REPLACE(REPLACE(LTRIM(RTRIM(CompletionDetails)), '3', ','), '.', ' ')

il n'est pas clair si vous voulez que . soit remplacé par '' ou '' .
J'ai utilisé le premier cas, vous pouvez le changer à votre guise.
C'est plus facile à comprendre comme ceci:

  1. supprimer tous les espaces de fin et de début: LTRIM (RTRIM (CompletionDetails))
  2. remplacez 3 par une virgule: REPLACE (?, '3', ',')
  3. remplacez-le par '': REPLACE (?, '.', '') ou REPLACE (?, '.', '')

0 commentaires

0
votes

Le LTRIM supprime les espaces de début. RTRIM supprime les espaces de fin. REPLACE supprime le point.

BuildRequestID
--------------
Friday

Résultat

Declare @Val Char(20) = '   Frid.ay    '

Select REPLACE(
                LTRIM(
                      RTRIM(
                         @Val   --dbo.x_COLUMNS(CompletionDetails, 3, ',')
                            )
                      ), '.', ''
              ) 


0 commentaires