it-swarm.com.de

Entfernen Sie alle Leerzeichen aus einer Zeichenfolge in SQL Server

Was ist der beste Weg, um alle Leerzeichen aus einer Zeichenfolge in SQL Server 2008 zu entfernen?

LTRIM(RTRIM(' a b ')) würde alle Leerzeichen rechts und links der Zeichenfolge entfernen, aber ich muss auch das Leerzeichen in der Mitte entfernen.

173
Ananth

Einfach austauschen;

SELECT REPLACE(fld_or_variable, ' ', '')

Bearbeiten: Nur zur Klarstellung; Da es sich um eine globale Ersetzung handelt, müssen Sie weder trim() noch mehrere Leerzeichen für char oder varchar beachten:

create table #t (
    c char(8),
    v varchar(8))

insert #t (c, v) values 
    ('a a'    , 'a a'    ),
    ('a a  '  , 'a a  '  ),
    ('  a a'  , '  a a'  ),
    ('  a a  ', '  a a  ')

select
    '"' + c + '"' [IN], '"' + replace(c, ' ', '') + '"' [OUT]
from #t  
union all select
    '"' + v + '"', '"' + replace(v, ' ', '') + '"'
from #t 

Ergebnis

IN             OUT
===================
"a a     "     "aa"
"a a     "     "aa"
"  a a   "     "aa"
"  a a   "     "aa"
"a a"          "aa"
"a a  "        "aa"
"  a a"        "aa"
"  a a  "      "aa"
301
Alex K.

Ich würde ein REPLACE verwenden

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

ERSETZEN

30
Eduardo Crimi

Wenn es sich um ein Update für eine Tabelle handelt, müssen Sie dieses Update mehrmals ausführen, bis es 0 Zeilen betrifft.

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

REPLACE() Funktion :

REPLACE(field, ' ', '')
11
Kaii

Referenz aus diesem Blog:

Erstellen Sie zunächst eine Probentabelle und Daten:

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

Skript für SELECT-Zeichenfolge ohne zusätzliche Leerzeichen:

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

Ergebnis:

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
9
Anvesh
7
marko

100% arbeiten

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

Sie können "column_name" oder column_name verwenden.

Vielen Dank

Subroto

5
Subroto Biswas

Wenn in einer Zeichenfolge mehrere Leerzeichen vorhanden sind, funktioniert das Ersetzen möglicherweise nicht ordnungsgemäß. Dafür sollte die folgende Funktion verwendet werden.

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

Beispiel:

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

Ausgabe:

aaaaaaaaaa
4
Farhan

Dadurch werden die Leerzeichen in den Zeichenfolgen entfernt:

UPDATE
    tablename
SET
    columnname = replace(columnname, ' ', '');
3
Mario Rojas

Nur ein Tipp, falls Sie Probleme mit der Replace-Funktion haben, ist der Datentyp möglicherweise auf nchar gesetzt (in diesem Fall hat dies eine feste Länge und funktioniert nicht).

2
starbyone

Nur für den Fall, dass Sie Leerzeichen in allen Spalten zuschneiden müssen, können Sie dieses Skript verwenden, um dies dynamisch auszuführen:

--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
2
Hiram
2
ZJA

wenn Sie Leerzeichen, - und einen anderen Text aus der Zeichenfolge entfernen möchten, verwenden Sie Folgendes:

angenommen, Sie haben in Ihrer Tabelle eine Handynummer wie '718-378-4957' oder '7183784957' und Sie möchten die Handynummer ersetzen und dann den folgenden Text verwenden.

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

Ergebnis: - 7183784957

2
Jeetendra Negi

Es scheint, dass sich alle immer wieder auf eine einzelne REPLACE-Funktion beziehen. Oder auch viele Aufrufe einer REPLACE-Funktion. Wenn Sie jedoch eine dynamische Ausgabe mit einer unbekannten Anzahl von Leerzeichen haben, funktioniert dies nicht. Jeder, der sich regelmäßig mit diesem Problem befasst, weiß, dass REPLACE nur ein einzelnes Leerzeichen entfernt, NICHT ALLES, wie es sollte. Und LTRIM und RTRIM scheinen dasselbe Problem zu haben. Überlassen Sie es Microsoft. Hier ist eine Beispielausgabe, die eine WHILE-Schleife verwendet, um ALL CHAR (32) -Werte (Leerzeichen) zu entfernen.

DECLARE @INPUT_VAL  VARCHAR(8000)
DECLARE @OUTPUT_VAL VARCHAR(8000)

SET @INPUT_VAL = '      C               A                         '
SET @OUTPUT_VAL = @INPUT_VAL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
    SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END

PRINT 'START:' + @INPUT_VAL + ':END'
PRINT 'START:' + @OUTPUT_VAL + ':END'

Hier ist die Ausgabe des obigen Codes:

START:      C               A                         :END
START:CA:END

Um einen Schritt weiter zu gehen und es in einer UPDATE- oder SELECT-Anweisung zu verwenden, ändern Sie es in ein udf.

CREATE FUNCTION udf_RemoveSpaces (@INPUT_VAL    VARCHAR(8000))
RETURNS VARCHAR(8000)
AS 
BEGIN

DECLARE @OUTPUT_VAL VARCHAR(8000)
SET @OUTPUT_VAL = @INPUT_VAL
-- ITTERATE THROUGH STRING TO LOOK FOR THE ASCII VALUE OF SPACE (CHAR(32)) REPLACE IT WITH BLANK, NOT NULL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
    SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END

RETURN @OUTPUT_VAL
END

Verwenden Sie dann die Funktion in einer SELECT- oder INSERT-Anweisung:

UPDATE A
SET STATUS_REASON_CODE = WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE

INSERT INTO SOMETABLE
(STATUS_REASON_CODE)
SELECT WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE
1
Tim

Ich hatte diese Ausgabe heute und ersetze/trimm den Trick .. siehe unten. 

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

vorher und nachher : 

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

das ist nützlich für mich:

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

.

0
Checho Man

ersetzen (Ersetzen (Spaltenname, Zeichen (13), ''), Zeichen (10), '')

0
Abdullah Yousuf

Aus irgendeinem Grund funktioniert die Ersetzung immer nur mit einer Zeichenfolge .. __ Ich hatte eine Zeichenfolge wie " Test MSP " und möchte nur ein Leerzeichen lassen.

Ich habe den Ansatz von @Farhan verwendet, jedoch mit einigen Modifikationen:

CREATE FUNCTION ReplaceAll
(
    @OriginalString varchar(8000),
    @StringToRemove varchar(20),
    @StringToPutInPlace varchar(20)
)
RETURNS varchar(8000)
AS
BEGIN
declare @ResultStr varchar(8000)
set @ResultStr = @OriginalString
while charindex(@StringToRemove, @ResultStr) > 0
    set @ResultStr = replace(@ResultStr, @StringToRemove, @StringToPutInPlace)

return @ResultStr
END

Dann führe ich mein Update so aus

UPDATE tbTest SET Description = dbo.ReplaceAll(Description, '  ', ' ') WHERE ID = 14225

Dann erhielt ich dieses Ergebnis: Test MSP

Postet hier, falls jemand es braucht, wie ich es getan habe.

Ausführen unter: Microsoft SQL Server 2016 (SP2)

0
Rogerio Honorio

Syntax zum Ersetzen bestimmter Zeichen:

REPLACE ( string_expression , string_pattern , string_replacement )  

In der Zeichenfolge "HelloReplaceThingsGoing" wird beispielsweise Word ersetzen durch How ersetzt

SELECT REPLACE('HelloReplaceThingsGoing','Replace','How');
GO
0
Subash J

Um die Leerzeichen in einer Zeichenfolge links und rechts zu entfernen. Um Platz in der Mitte zu entfernen, Replace.

Sie können RTRIM() verwenden, um Leerzeichen von rechts zu entfernen, und LTRIM(), um Leerzeichen von links zu entfernen.

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

Eine funktionale Version (udf), die Leerzeichen, cr, lf, Registerkarten oder konfigurierbar entfernt.

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

Ergebnis: '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
0
crokusek