J'utilise SQL Server MSDE 2000. J'ai un champ appelé 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. P> mais cela ne fonctionne pas. Y a-t-il une façon alternative de le faire? P> P> notes code> de type nvarchar (65).
3 Réponses :
Êtes-vous sûr que la requête ne fonctionne pas? Essayez: top 100 code> 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: p>
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
... 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, 'Â ', '')
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
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.