2009-12-08 4 views
9

J'utilise le serveur SQL MSDE 2000. J'ai un champ appelé notes de type nvarchar (65).Supprimer l'espace vide de fin dans un contenu de champ

Le contenu est 'Quelque chose' avec un espace supplémentaire après le contenu (citations pour plus de clarté) dans tous les enregistrements. J'ai utilisé la commande suivante.

UPDATE TABLE1 
    SET notes = RTRIM(LTRIM(notes)) 

Mais cela ne fonctionne pas. Y a-t-il une autre façon de le faire?

+2

que voulez-vous dire par « ne fonctionne pas »? Il devrait .... –

+0

Pas sûr. La requête est exécutée correctement et j'obtiens le message '(12539 ligne (s) affectée (s))'. Mais le champ a toujours la valeur avec un espace de fin. – bdhar

+0

vous regardez la bonne instance de serveur, table ?? Je l'ai déjà fait ... –

Répondre

10

Etes-vous sûr que la requête ne fonctionne pas? Essayez:

SELECT TOP 100 '~'+ t.notes +'~' 
    FROM TABLE1 t 

TOP 100 limitera les résultats aux 100 premières lignes, assez pour avoir une idée s'il y a vraiment un espace dans la sortie. Si tel est le cas, et que RTRIM/LTRIM ne le supprime pas, alors vous n'avez pas affaire à un caractère d'espace. Dans ce cas, essayez:

UPDATE TABLE1 
    SET notes = REPLACE(notes, 
         SUBSTRING(notes, PATINDEX('%[^a-zA-Z0-9 '''''']%', notes), 1), 
         '') 
WHERE PATINDEX('%[^a-zA-Z0-9 '''''']%', notes) <> 0 
+0

Celui-ci fonctionne. Quelle est la différence entre ceci et celui que j'ai utilisé? – bdhar

+1

@Bharanidharan: Il supprime les caractères ASCII non imprimables, ce qui n'est pas le cas de LTRIM/RTRIM. –

+0

Fin. Qu'est-ce qu'un caractère ACSII non-imprimable? Est-ce différent d'un espace vide? – bdhar

1

... OU vous pouvez littéralement copier/coller le blanc « » (espace) à la fin d'un champ à la suite de votre requête dans votre déclaration et remplacer mettre à jour tout à partir de là.

update TABLE1 
set notes = replace(notes, ' ', '') 
0

Et juste au cas où vous devez TRIM tous les espaces dans toutes les colonnes, vous pouvez utiliser ce script pour le faire dynamiquement:

--Just change table name 
declare @MyTable varchar(100) 
set @MyTable = 'MyTable' 

--temp table to get column names and a row id 
select column_name, ROW_NUMBER() OVER(ORDER BY column_name) as id into #tempcols from INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE IN ('varchar', 'nvarchar') and TABLE_NAME = @MyTable 

declare @tri int 
select @tri = count(*) from #tempcols 
declare @i int 
select @i = 0 
declare @trimmer nvarchar(max) 
declare @comma varchar(1) 
set @comma = ', ' 

--Build Update query 
select @trimmer = 'UPDATE [dbo].[' + @MyTable + '] SET ' 

WHILE @i <= @tri 
BEGIN 

    IF (@i = @tri) 
     BEGIN 
     set @comma = '' 
     END 
    SELECT @trimmer = @trimmer + CHAR(10)+ '[' + COLUMN_NAME + '] = LTRIM(RTRIM([' + COLUMN_NAME + ']))'[email protected] 
    FROM #tempcols 
    where id = @i 

    select @i = @i+1 
END 

--execute the entire query 
EXEC sp_executesql @trimmer 

drop table #tempcols 
Questions connexes