2009-12-08 16 views
9

Ich verwende SQL Server MSDE 2000. Ich habe ein Feld namens notes des Typs nvarchar (65).Entfernen Sie abschließende Leerzeichen in einem Feld Inhalt

Der Inhalt ist "etwas" mit einem zusätzlichen Leerzeichen nach dem Inhalt (Anführungszeichen für Klarheit) in allen Datensätzen. Ich habe den folgenden Befehl verwendet.

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

Aber es funktioniert nicht. Gibt es einen alternativen Weg, es zu tun?

+2

was meinst du mit „funktioniert nicht“? Es sollte .... –

+0

Nein sicher. Die Abfrage wird ordnungsgemäß ausgeführt und ich erhalte die Nachricht "(12539 Zeile (n) betroffen)". Aber das Feld hat immer noch den Wert mit einem nachgestellten Leerzeichen. – bdhar

+0

Sie suchen die richtige Serverinstanz, Tabelle ?? Ich habe das vorher gemacht ... –

Antwort

10

Sind Sie sicher, dass die Abfrage nicht funktioniert? Versuchen:

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

TOP 100 werden die Ergebnisse für die ersten 100 Zeilen zu begrenzen, genug, um eine Vorstellung zu bekommen, wenn es in der Ausgabe wirklich ein Raum ist. Wenn dies der Fall ist und RTRIM/LTRIM es nicht entfernt, haben Sie es nicht mit einem Leerzeichen zu tun. In diesem Fall versuchen:

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

Dieser funktioniert. Was ist der Unterschied zwischen diesem und dem, den ich benutzt habe? – bdhar

+1

@Bharanidharan: Es entfernt nicht druckbare ASCII-Zeichen, was LTRIM/RTRIM nicht tut. –

+0

Fein. Was ist ein nicht druckbares ACSII-Zeichen? Ist es anders als eine Leerstelle? – bdhar

1

... OR Sie konnte buchstäblich Kopieren/Einfügen nur die leere ‚‘ (Leerzeichen) am Ende eines Feldes als Ergebnis der Abfrage in Ihre ersetzen Anweisung und update alles von dort.

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

Und für den Fall, dass Sie alle Leerzeichen in allen Spalten TRIM benötigen, können Sie dieses Skript verwenden, es zu tun dynamisch:

--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 
Verwandte Themen