9
votes

Supprimer l'espace vide de fuite dans un contenu de champ

J'utilise SQL Server MSDE 2000. J'ai un champ appelé notes de type nvarchar (65).

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

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


4 commentaires

Qu'entendez-vous par «ne fonctionne pas»? Cela devrait ....


Pas sur. La requête est correctement exécutée et je reçois le message '(12539 rangées (s) affectées (s)). Mais le champ a toujours la valeur avec un espace de fin.


Vous regardez la bonne instance serveur, tableau ?? Je l'ai fait avant ...


Rtrim devrait fonctionner bien. Êtes-vous sûr que le personnage est ensuite un espace? Vous voudrez peut-être vérifier la classement que vous utilisez et la valeur des octets.


3 Réponses :


11
votes

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

top 100 limitera les résultats aux 100 premières lignes, suffisamment pour avoir une idée s'il y a vraiment un espace dans la sortie. S'il y en a, et Rtrim / ltrim ne le retire pas - alors vous ne traitez pas de caractère d'espaces. Dans ce cas, essayez: xxx


4 commentaires

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


@Bharanidharan: Il supprime des caractères ASCII non imprimables, que Ltrim / Rtrim ne le fait pas.


Amende. Qu'est-ce qu'un caractère ASCII non imprimable? Est-ce différent d'un espace vide?


Les premières valeurs sont des caractères de commande non d'impression, telles que le retour de chariot (valeur décimale 13) et l'alimentation en ligne (valeur décimale 10): CSGNETWORK.COM/ASCIISET.HTML



0
votes

... ou strong> vous pouvez littéralement copier / coller le blanc 'Â' (espace) à la fin d'un champ à la suite de votre requête dans votre déclaration Remplacer et tout mettre à jour de là .

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


0 commentaires

0
votes

Et juste au cas où vous auriez besoin de couper tous les espaces dans toutes les colonnes, vous pouvez utiliser ce script pour le faire de manière dynamique:

--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 + ']))'+@comma
    FROM    #tempcols
    where id = @i

    select @i = @i+1
END

--execute the entire query
EXEC sp_executesql @trimmer

drop table #tempcols


0 commentaires