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
4 Réponses :
Une approche possible consiste à utiliser après le premier Table: P> remplacer () code> S: 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> EXEC replace_characters_1 N'Name', N'Data'
SELECT * FROM Data
Name
ANNA.Amal
ANNA.Amal.
ANNA.Amal.
ANNA.Amal.
ANNA.Amal
J'ai eu des collisions en utilisant <>, c'est pourquoi je choisis une combinaison extrêmement rare de ‡ †
J'utilise Charindex et des trucs pour dériver le ResultinSet
+------------------------+ | Values | +------------------------+ | Anna.Amal,Vimal.Mathew | +------------------------+
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 code> Il retournera anna.mathews code>.
@Ezlo l'a eu. L'exigence est modifiée. J'ai besoin de changer de changement
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
Voici une approche qui réduira les caractères répétés.
exemple fort> p> retourne p>
@Johncappelletti Je pense que l'option code> est imbriquée code> S est une meilleure option, +1.
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