Supprimer tous les espaces d'une chaîne de caractères dans SQL Server

Quelle est la meilleure façon de supprimer tous les espaces d'une chaîne de caractères dans SQL Server 2008?

LTRIM(RTRIM(' a b ')) supprimerait tous les espaces à droite et à gauche de la chaîne, mais je dois également supprimer l'espace au milieu.

158
demandé sur Brien Foss 2012-05-03 17:09:50

19 réponses

simplement le remplacer;

SELECT REPLACE(fld_or_variable, ' ', '')

Modifier Juste pour clarifier, c'est un remplacement global, il n'y a pas besoin de trim() ou de s'inquiéter de plusieurs espaces:

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 

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'
274
répondu Alex K. 2013-04-30 15:04:53

je remplacerais

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

remplacer

30
répondu Eduardo Crimi 2012-05-03 13:12:15

si c'est une mise à jour sur une table tout ce que vous avez à faire est d'exécuter cette mise à jour plusieurs fois jusqu'à ce qu'elle affecte 0 lignes.

update tableName
set colName = REPLACE(LTRIM(RTRIM(colName)), '  ', ' ')
where colName like '%  %'
18
répondu SQL_King 2013-05-25 05:21:07

REPLACE() fonction :

REPLACE(field, ' ', '')
11
répondu Kaii 2012-05-03 13:13:29

T-sql remplacer http://msdn.microsoft.com/en-us/library/ms186862.aspx

remplacer (val,' ',")

7
répondu marko 2012-05-03 13:12:54

"référence tirée de ce blog:

tout D'abord, créer la table d'échantillon et les données:

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 pour sélectionner la chaîne sans espaces supplémentaires:

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

résultat:

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
7
répondu Anvesh 2016-05-23 19:08:05

S'il y a plusieurs espaces blancs dans une chaîne, remplacer peut ne pas fonctionner correctement. Pour cela, la fonction suivante doit être utilisée.

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

exemple:

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

sortie:

aaaaaaaaaa
5
répondu Farhan 2012-07-20 15:39:39

100% travail

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

vous pouvez utiliser "column_name" ou column_name

Merci

Subroto

5
répondu Subroto Biswas 2018-02-19 07:05:59

ceci fait l'astuce d'enlever les espaces sur les cordes:

UPDATE
    tablename
SET
    columnname = replace(columnname, ' ', '');
3
répondu Mario Rojas 2018-09-21 16:29:46

juste au cas où vous avez besoin de couper les espaces dans toutes les colonnes, vous pouvez utiliser ce script pour le faire dynamiquement:

--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
2
répondu Hiram 2014-03-07 22:11:03

si vous voulez supprimer des espaces, -, et un autre texte de la chaîne alors utiliser ce qui suit:

supposons que vous ayez un numéro de téléphone mobile dans votre Table comme "718-378-4957" ou '7183784957' et vous voulez remplacer et obtenir le numéro de mobile puis utiliser le texte suivant.

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

résultat: -- 7183784957

2
répondu Jeetendra Negi 2015-03-20 20:47:13

juste une astuce, dans le cas où vous avez des problèmes avec la fonction de remplacement, vous pourriez avoir le type de données défini à nchar (dans ce cas, il s'agit d'une longueur fixe et il ne fonctionnera pas).

2
répondu starbyone 2016-12-20 20:08:18
2
répondu ZJA 2017-11-29 21:50:52

j'ai eu ce problème aujourd'hui et remplacer / couper a fait l'affaire..voir ci-dessous.

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

avant et après:

old-bad:  column_bar    |   New-fixed:   column_bar
       '  xyz  '        |                'xyz'   
       '  xyz  '        |                'xyz' 
       '  xyz  '        |                'xyz' 
       '  xyz  '        |                'xyz' 
       '  xyz  '        |                'xyz' 
       '  xyz  '        |                'xyz' 
1
répondu zee 2016-07-19 14:40:56

pour supprimer les espaces dans une corde à gauche et à droite. Pour supprimer l'espace dans l'utilisation moyenne Replace .

vous pouvez utiliser RTRIM() pour supprimer des espaces à partir de la droite et LTRIM() pour supprimer des espaces à partir de la gauche d'où les espaces à gauche et à droite supprimés comme suit:

SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
0
répondu NarayanaReddy 2015-08-13 05:32:48

remplacer (remplacer (column_Name, CHAR(13),"), CHAR(10),")

0
répondu Abdullah Yousuf 2018-02-14 09:29:28

c'est utile pour moi:

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
répondu Checho Man 2018-03-08 17:17:29

syntaxe pour remplacer un caractère spécifique:

REPLACE ( string_expression , string_pattern , string_replacement )  

par exemple dans la chaîne de caractères "Helloreplacethingsvoing" remplacer le mot est remplacé par le texte suivant:

SELECT REPLACE('HelloReplaceThingsGoing','Replace','How');
GO
0
répondu Subash J 2018-03-08 17:25:25

une version fonctionnelle (udf) qui supprime les espaces, cr, lf, onglets ou configurable.

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

résultat: '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
répondu crokusek 2018-07-24 23:32:34