-1
votes

Remplacer plus d'une période à 1 période dans SQL

J'ai le code suivant pour convertir plus d'une période à une période d'une colonne d'une table.

alter proc replace_characters_1
@COLUMN_NAME varchar(30),
@TABLE_NAME varchar(30)
as 
    declare @SQL varchar(MAX)
    while @COLUMN_NAME like '%..%'
    begin
    set @SQL= 'update [' +@TABLE_NAME+ '] set [' +@COLUMN_NAME+ '] = replace([' +@COLUMN_NAME+ '],''..'',''.'')';
    exec(@SQL)
end


7 commentaires

Veuillez fournir des données d'échantillonnage et des résultats souhaités.


Vous voulez remplacer un nombre inconnu de points avec un point?


Votre condition tandis que la condition vérifie le nom de la colonne pour la survenue de '..', pas le contenu réel de la table avec ce nom de colonne.


Je donne le nom de colonne dans l'énoncé d'exécution de la procédure stockée.


oui je veux remplacer plusieurs nombres de points en un


@Annasojan j'ai considéré plusieurs points. S'il vous plaît voir ma solution


Si j'ai des données dans la colonne comme Anna ... Amal, Anna..sojan, et Anna .... Chérie, je veux que cela change d'anna.amal, Anna.sojan et Anna.Honey


4 Réponses :


3
votes

Une approche possible consiste à utiliser remplacer () code> S: xxx pré>

après le premier remplacer () code> la pièce du Texte contenant des périodes (. code>) ressemble à code>. Après le second remplacer () code>, le résultat est uniquement code> et le dernier remplacer () code> retourne une période unique (. Code >). Si les caractères et > code> existent dans le texte d'entrée, vous pouvez choisir une autre paire de caractères. P>

Table: P>

EXEC replace_characters_1 N'Name', N'Data'
SELECT * FROM Data

Name
ANNA.Amal
ANNA.Amal.
ANNA.Amal.
ANNA.Amal.
ANNA.Amal


1 commentaires

J'ai eu des collisions en utilisant <>, c'est pourquoi je choisis une combinaison extrêmement rare de ‡ †



0
votes

J'utilise Charindex et des trucs pour dériver le ResultinSet

+------------------------+
|         Values         |
+------------------------+
| Anna.Amal,Vimal.Mathew |
+------------------------+


4 commentaires

Ca a du sens. Laissez-moi essayer. Merci :)


Marquez-le comme réponse, si cela fonctionnait. Ce sera utile pour les autres à l'avenir.


Cela fonctionne s'il n'y a qu'un seul endroit avec des points, si vous essayez avec la valeur anna ... Amal ... mathews Il retournera anna.mathews .


@Ezlo l'a eu. L'exigence est modifiée. J'ai besoin de changer de changement



1
votes

Vérifiez la réponse de Zhorov car elle évite plusieurs opérations comme celle-ci.


CREATE PROCEDURE replace_characters_1
    @COLUMN_NAME varchar(30),
    @TABLE_NAME varchar(30)
AS
BEGIN

    DECLARE @SQL NVARCHAR(MAX) = N'
        UPDATE T SET
            ' + QUOTENAME(@COLUMN_NAME) + N' = REPLACE(' + QUOTENAME(@COLUMN_NAME) + N',''..'',''.'')
        FROM
            ' + QUOTENAME(@TABLE_NAME) + N' AS T
        WHERE
            T.' + QUOTENAME(@COLUMN_NAME) + N' LIKE ''%..%'';

        SET @UpdatedRowsOut = @@ROWCOUNT;';

    DECLARE @UpdatedRows INT = 1;

    WHILE @UpdatedRows > 0
    BEGIN

        EXECUTE sp_executesql 
            @SQL,
            N'@UpdatedRowsOut INT OUTPUT',
            @UpdatedRowsOut = @UpdatedRows OUTPUT;

    END

END


0 commentaires

2
votes

Voici une approche qui réduira les caractères répétés.

exemple xxx

retourne xxx


1 commentaires

@Johncappelletti Je pense que l'option est imbriquée S est une meilleure option, +1.