Rimuovi tutti gli spazi da una stringa in SQL Server

Qual è il modo migliore per rimuovere tutti gli spazi da una stringa in SQL Server 2008?

LTRIM (RTRIM (‘ab’) rimuoverà tutti gli spazi a destra e a sinistra della stringa, ma ho anche bisogno di rimuovere lo spazio nel mezzo.

Semplicemente sostituirlo;

SELECT REPLACE(fld_or_variable, ' ', '') 

Modifica Giusto per chiarire; è una sostituzione globale, non è necessario trim() o preoccuparsi di più spazi:

 create table #t (c char(8), v varchar(8)) insert #t (c, v) values ('aa' , 'aa' ), ('aa ' , 'aa ' ), (' aa' , ' aa' ), (' aa ', ' aa ') select '''' + c + '''' [IN], '''' + replace(c, ' ', '') + '''' [OUT] from #t union all select '''' + v + '''', '''' + replace(v, ' ', '') + '''' from #t IN OUT 'aa ' 'aa' 'aa ' 'aa' ' aa ' 'aa' ' aa ' 'aa' 'aa' 'aa' 'aa ' 'aa' ' aa' 'aa' ' aa ' 'aa' 

Vorrei usare un SOSTITUISCI

 select REPLACE (' Hello , How Are You ?', ' ', '' ) 

SOSTITUIRE

Se si tratta di un aggiornamento su una tabella, tutto ciò che devi fare è eseguire questo aggiornamento più volte fino a quando non ha effetto su 0 righe.

 update tableName set colName = REPLACE(LTRIM(RTRIM(colName)), ' ', ' ') where colName like '% %' 

Funzione REPLACE() :

 REPLACE(field, ' ', '') 

t-sql sostituisce http://msdn.microsoft.com/en-us/library/ms186862.aspx

replace (val, ”, ”)

Riferimento tratto da questo blog:

Innanzitutto, crea una tabella di esempio e dati:

 CREATE TABLE tbl_RemoveExtraSpaces ( Rno INT ,Name VARCHAR(100) ) GO INSERT INTO tbl_RemoveExtraSpaces VALUES (1,'I am Anvesh Patel') INSERT INTO tbl_RemoveExtraSpaces VALUES (2,'Database Research and Development ') INSERT INTO tbl_RemoveExtraSpaces VALUES (3,'Database Administrator ') INSERT INTO tbl_RemoveExtraSpaces VALUES (4,'Learning BIGDATA and NOSQL ') GO 

Script per SELECT string senza spazi extra:

 SELECT [Rno] ,[Name] AS StringWithSpace ,LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([Name],CHAR(32),'()'),')(',''),'()',CHAR(32)))) AS StringWithoutSpace FROM tbl_RemoveExtraSpaces 

Risultato:

 Rno StringWithSpace StringWithoutSpace ----------- ----------------------------------------- --------------------------------------------- 1 I am Anvesh Patel I am Anvesh Patel 2 Database Research and Development Database Research and Development 3 Database Administrator Database Administrator 4 Learning BIGDATA and NOSQL Learning BIGDATA and NOSQL 

Se ci sono più spazi bianchi in una stringa, la sostituzione potrebbe non funzionare correttamente. Per questo, dovrebbe essere usata la seguente funzione.

 CREATE FUNCTION RemoveAllSpaces ( @InputStr varchar(8000) ) RETURNS varchar(8000) AS BEGIN declare @ResultStr varchar(8000) set @ResultStr = @InputStr while charindex(' ', @ResultStr) > 0 set @ResultStr = replace(@InputStr, ' ', '') return @ResultStr END 

Esempio:

 select dbo.RemoveAllSpaces('aa aaa aa aa a') 

Produzione:

 aaaaaaaaaa 

100% di lavoro

 UPDATE table_name SET "column_name"=replace("column_name", ' ', ''); //Remove white space UPDATE table_name SET "column_name"=replace("column_name", '\n', ''); //Remove newline UPDATE table_name SET "column_name"=replace("column_name", '\t', ''); //Remove all tab 

Puoi usare "column_name" o column_name

Grazie

Subroto

Questo fa il trucco di rimuovere gli spazi sulle stringhe:

 UPDATE tablename SET colunmname = replace(colunmname, ' ', ''); 

Nel caso in cui sia necessario TRIM spazi in tutte le colonne, è ansible utilizzare questo script per farlo in modo dinamico:

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

se vuoi rimuovere gli spazi, -, e un altro testo dalla stringa, allora usa:

supponi di avere un numero di cellulare nella tua tabella come “718-378-4957” o “7183784957” e desideri sostituirlo e ottenere il numero di cellulare, quindi utilizzare il seguente testo.

 select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber 

Risultato: – 7183784957

Solo un suggerimento, in caso di problemi con la funzione di sostituzione, si potrebbe avere il tipo di dati impostato su nchar (nel qual caso è una lunghezza fissa e non funzionerà).

Per completare tutte le risposte sopra, ci sono ulteriori post su StackOverflow su come gestire TUTTI i caratteri di spazi bianchi (vedi https://en.wikipedia.org/wiki/Whitespace_character per un elenco completo di questi caratteri):

  • TSQL 2008 Utilizzo di LTrim (RTrim e ancora spazio nei dati
  • Come rimuovere spazi non interrotti da una colonna nel server SQL?
  • Qual è un buon modo per tagliare tutti i caratteri da una stringa in T-SQL senza UDF e senza CLR?

Ho avuto questo problema oggi e sostituire / tagliare il trucco … vedi sotto.

 update table_foo set column_bar = REPLACE(LTRIM(RTRIM(column_bar)), ' ', '') 

prima e dopo :

 old-bad: column_bar | New-fixed: column_bar ' xyz ' | 'xyz' ' xyz ' | 'xyz' ' xyz ' | 'xyz' ' xyz ' | 'xyz' ' xyz ' | 'xyz' ' xyz ' | 'xyz' 

Per rimuovere gli spazi in una stringa a sinistra ea destra. Per rimuovere lo spazio in uso centrale, Replace .

È ansible utilizzare RTRIM() per rimuovere gli spazi da destra e LTRIM() per rimuovere gli spazi da sinistra, quindi gli spazi sinistro e destro rimossi come segue:

 SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby")) 

replace (sostituire (nome_colonna, CHAR (13), ”), CHAR (10), ”)

questo è utile per me:

 CREATE FUNCTION dbo.TRIM(@String VARCHAR(MAX)) RETURNS VARCHAR(MAX) BEGIN RETURN LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,CHAR(10),'[]'),CHAR(13),'[]'),char(9),'[]'),CHAR(32),'[]'),'][',''),'[]',CHAR(32)))); END GO 

.

Sintassi per la sostituzione di caratteri specifici:

 REPLACE ( string_expression , string_pattern , string_replacement ) 

Ad esempio nella stringa “HelloReplaceThingsGoing” Sostituisci word è sostituito da How

 SELECT REPLACE('HelloReplaceThingsGoing','Replace','How'); GO 

Una versione funzionale (udf) che rimuove gli spazi, cr, lf, tabs o configurabili.

 select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as S 

Risultato: ‘234asdfwefwef3x’

 alter function Common.RemoveWhitespace ( @pString nvarchar(max), @pWhitespaceCharsOpt nvarchar(max) = null -- default: tab, lf, cr, space ) returns nvarchar(max) as /*-------------------------------------------------------------------------------------------------- Purpose: Compress whitespace Example: select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as s -- Result: 234asdfwefwef3x Modified By Description ---------- ----------- -------------------------------------------------------------------- 2018.07.24 crokusek Initial Version --------------------------------------------------------------------------------------------------*/ begin declare @maxLen bigint = 1073741823, -- (2^31 - 1) / 2 (https://stackoverflow.com/a/4270085/538763) @whitespaceChars nvarchar(30) = coalesce( @pWhitespaceCharsOpt, char(9) + char(10) + char(13) + char(32)); -- tab, lf, cr, space declare @whitespacePattern nvarchar(30) = '%[' + @whitespaceChars + ']%', @nonWhitespacePattern nvarchar(30) = '%[^' + @whitespaceChars + ']%', @previousString nvarchar(max) = ''; while (@pString != @previousString) begin set @previousString = @pString; declare @whiteIndex int = patindex(@whitespacePattern, @pString); if (@whiteIndex > 0) begin declare @whitespaceLength int = nullif(patindex(@nonWhitespacePattern, substring(@pString, @whiteIndex, @maxLen)), 0) - 1; set @pString = substring(@pString, 1, @whiteIndex - 1) + iif(@whiteSpaceLength > 0, substring(@pString, @whiteIndex + @whiteSpaceLength, @maxLen), ''); end end return @pString; end go