Quelle est la meilleure façon de supprimer tous les espaces d'une chaîne 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.
Quelle est la meilleure façon de supprimer tous les espaces d'une chaîne 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.
Réponses:
Remplacez-le simplement;
SELECT REPLACE(fld_or_variable, ' ', '')Edit: 
Juste pour clarifier; c'est un remplacement global, il n'y a pas besoin de trim()s'inquiéter de plusieurs espaces pour charou varchar:
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 Résultat
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"REPLACE(field, ' ', '')Tout d'abord, créez un exemple de table et de 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 ')
GOScript pour sélectionner une 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_RemoveExtraSpacesRé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 NOSQL100% de 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 tabVous pouvez utiliser "column_name"oucolumn_name
Merci
Subroto
select replace(replace(replace(varcharColumn,char(13),''),char(10),''),' ','')pour supprimer tous les sauts de ligne et les espaces d'une varcharcolonne. Si j'ai utilisé '\ n' et '\ r' au lieu de char (13) et char (10) cela n'a pas fonctionné.
                    t-sql replace http://msdn.microsoft.com/en-us/library/ms186862.aspx
remplacer (val, '', '')
S'il y a plusieurs espaces blancs dans une chaîne, le remplacement 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
ENDExemple:
select dbo.RemoveAllSpaces('aa  aaa       aa aa                 a')Production:
aaaaaaaaaaCela fait l'affaire de supprimer les espaces sur les chaînes:
UPDATE
    tablename
SET
    columnname = replace(columnname, ' ', '');Juste au cas où vous auriez besoin de TRIM 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 #tempcolssi vous souhaitez supprimer des espaces, - et un autre texte de la chaîne, utilisez ce qui suit:
Supposons que vous ayez un numéro de mobile dans votre tableau comme '718-378-4957' ou '7183784957' et que vous souhaitiez remplacer et obtenir le numéro de mobile, puis utilisez le texte suivant.
select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumberRésultat: - 7183784957
Pour compléter toutes les réponses ci-dessus, il existe des articles supplémentaires sur StackOverflow sur la façon de gérer TOUS les espaces blancs (voir https://en.wikipedia.org/wiki/Whitespace_character pour une liste complète de ces caractères):
replace (replace (column_Name, CHAR (13), ''), CHAR (10), '')
cela m'est utile:
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.
J'ai eu ce problème aujourd'hui et remplacer / trim 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' LTRIM& RTRIM?
                    Pour supprimer les espaces dans une chaîne de gauche et de droite. Pour supprimer l'espace en utilisation moyenneReplace .
Vous pouvez utiliser RTRIM()pour supprimer les espaces de droite et LTRIM()pour supprimer les espaces de gauche, donc les espaces gauche et droit supprimés comme suit:
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))Une version fonctionnelle (udf) qui supprime les espaces, cr, lf, tabulations ou configurables.
select Common.ufn_RemoveWhitespace(' 234   asdf   wefwef 3  x   ', default) as SRé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
goPour une raison quelconque, le remplacement ne fonctionne qu'avec une chaîne à chaque fois. J'avais une chaîne comme celle-ci " Test MSP " et je veux ne laisser qu'un seul espace.
J'ai utilisé l'approche de @Farhan, mais avec quelques modifications:
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
ENDEnsuite, je lance ma mise à jour comme ça
UPDATE tbTest SET Description = dbo.ReplaceAll(Description, '  ', ' ') WHERE ID = 14225Ensuite, j'ai obtenu ce résultat: Test MSP
Publier ici si au cas où quelqu'un en aurait besoin comme moi.
Fonctionnant sur: Microsoft SQL Server 2016 (SP2)
Vérifiez et essayez le script ci-dessous (Unit Tested) -
--Declaring
DECLARE @Tbl TABLE(col_1 VARCHAR(100));
--Test Samples
INSERT INTO @Tbl (col_1)
VALUES
('  EY     y            
Salem')
, ('  EY     P    ort       Chennai   ')
, ('  EY     Old           Park   ')
, ('  EY   ')
, ('  EY   ')
,(''),(null),('d                           
    f');
SELECT col_1 AS INPUT,
    LTRIM(RTRIM(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
    REPLACE(
        REPLACE(
        REPLACE(
        REPLACE(
        REPLACE(
        REPLACE(
        REPLACE(col_1,CHAR(10),' ')
        ,CHAR(11),' ')
        ,CHAR(12),' ')
        ,CHAR(13),' ')
        ,CHAR(14),' ')
        ,CHAR(160),' ')
        ,CHAR(13)+CHAR(10),' ')
    ,CHAR(9),' ')
    ,' ',CHAR(17)+CHAR(18))
    ,CHAR(18)+CHAR(17),'')
    ,CHAR(17)+CHAR(18),' ')
    )) AS [OUTPUT]
FROM @Tbl;Il semble que tout le monde continue de se référer à une seule fonction REPLACE. Ou même de nombreux appels d'une fonction REMPLACER. Mais lorsque vous avez une sortie dynamique avec un nombre inconnu d'espaces, cela ne fonctionnera pas. Quiconque traite régulièrement ce problème sait que REPLACE ne supprimera qu'un seul espace, PAS TOUS, comme il se doit. Et LTRIM et RTRIM semblent avoir le même problème. Laissez-le à Microsoft. Voici un exemple de sortie qui utilise une boucle WHILE pour supprimer TOUTES les valeurs CHAR (32) (espace).
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'Voici la sortie du code ci-dessus:
START:      C               A                         :END
START:CA:ENDMaintenant, pour aller plus loin et l'utiliser dans une instruction UPDATE ou SELECT, changez-le en 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
ENDUtilisez ensuite la fonction dans une instruction SELECT ou INSERT:
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