在SQL Server中的字符串,删除所有空格在SQL Server中的字符串,删除所有空格(Rem

2019-05-13 19:48发布

什么是从SQL Server 2008中的字符串中删除所有空间的最佳方式?

LTRIM(RTRIM(' ab '))将删除所有空格在右边和左边的字符串,但我还需要删除中间的空间。

Answer 1:

只需更换它;

SELECT REPLACE(fld_or_variable, ' ', '')

编辑:只是为了澄清; 它的全局替换,就没有必要trim()也不用担心多个空间对于任何一个charvarchar

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"


Answer 2:

我会用一个REPLACE

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

更换



Answer 3:

如果是在一个表中的所有你所要做的,直到它影响0行运行此更新多次更新。

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


Answer 4:

REPLACE()函数 :

REPLACE(field, ' ', '')


Answer 5:

从这个博客采取参考:

首先,创建示例表和数据:

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

脚本,以选择没有多余的空格字符串:

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

结果:

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


Answer 6:

T-SQL替换http://msdn.microsoft.com/en-us/library/ms186862.aspx

替换(VAL, '', '')



Answer 7:

100%的工作

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

您可以使用"column_name"column_name

谢谢

Subroto



Answer 8:

如果有多个空格的字符串,然后更换可能无法正常工作。 为此,应使用下列功能。

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

例:

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

输出:

aaaaaaaaaa


Answer 9:

这确实消除对字符串中的空格的伎俩:

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


Answer 10:

万一你需要修剪空间中的所有列,你可以使用这个脚本来动态地做到这一点:

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


Answer 11:

如果你想删除空格, - ,从另一个字符串文本,然后使用下列内容:

假设你有你的表像“718-378-4957”或“7183784957”一个手机号码,你想更换,并得到那么移动电话号码使用下面的文字。

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

结果: - 7183784957



Answer 12:

只是一个提示,如果您有替换功能麻烦,你可能有数据类型设置为nchar(在这种情况下,它是一个固定的长度,它不会工作)。



Answer 13:

为了使上述所有完整的答案,对于如何处理所有空白字符(见StackOverflow上增设职位https://en.wikipedia.org/wiki/Whitespace_character这些字符的完整列表):

  • TSQL 2008使用LTRIM(RTRIM,而且还有在数据空间
  • 如何从SQL Server中的列中删除不破,空间?
  • 什么是修剪掉在T-SQL字符串中的所有空格字符不UDF和CLR没有好办法?


Answer 14:

我今天有这个问题,并替换/装饰做了以下trick..see。

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

之前和之后 :

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


Answer 15:

REPLACE(替换(列名,CHAR(13), ''),CHAR(10), '')



Answer 16:

为了消除左,右一个字符串的空间。 为了消除中间利用空间Replace

您可以使用RTRIM()删除从右侧和空格LTRIM()以去除去除如下左从而左右空间的空间:

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


Answer 17:

该方法适用于我:

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



Answer 18:

语法替换特定的字符:

REPLACE ( string_expression , string_pattern , string_replacement )  

例如字符串“HelloReplaceThingsGoing”替换词是如何取代

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


Answer 19:

的功能的版本(UDF),其去除空格,CR,LF,选项卡或可配置的。

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

结果: '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


Answer 20:

出于某种原因,更换工作只能每次一个字符串。 我有这样的“ 测试MSP”的字符串,我想只留下一个空间。

我用@Farhan做的方法,但有一些修改:

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

然后,我跑我的更新这样的

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

然后我得到了这样的结果: 测试MSP

张贴在这里如果万一有人需要它,因为我做到了。

运行于:Microsoft SQL Server的2016(SP2)



文章来源: Remove all spaces from a string in SQL Server