从SQL Server中的字符串中删除所有空格

Ana*_*nth 201 sql sql-server string whitespace trim

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

LTRIM(RTRIM(' a b ')) 将删除字符串右侧和左侧的所有空格,但我还需要删除中间的空格.

Ale*_* K. 361

只需更换它;

SELECT REPLACE(fld_or_variable, ' ', '')
Run Code Online (Sandbox Code Playgroud)

编辑: 只是为了澄清; 它是一个全球替代品,不需要trim()或担心多个空间char或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 
Run Code Online (Sandbox Code Playgroud)

结果

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"
Run Code Online (Sandbox Code Playgroud)

  • 替换删除所有空格甚至尾随一个.如果在完成此操作后数据中仍有空间,则很可能它们不是空格,而是像tab或carraige返回的不可打印的字符. (30认同)
  • 它应该取代所有地方的空白 (7认同)
  • 如果单词之间有多个空格怎么办?REPLACE一次只删除一个.应编写用户定义的函数,删除多个空格. (2认同)

小智 34

我会用REPLACE

select REPLACE (' Hello , How Are You ?', ' ', '' )
Run Code Online (Sandbox Code Playgroud)

更换


SQL*_*ing 23

如果它是对表的更新,您只需多次运行此更新,直到它影响0行.

update tableName
set colName = REPLACE(LTRIM(RTRIM(colName)), '  ', ' ')
where colName like '%  %'
Run Code Online (Sandbox Code Playgroud)


Anv*_*esh 11

从这篇博客中摘录:

首先,创建样本表和数据:

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
Run Code Online (Sandbox Code Playgroud)

没有额外空格的SELECT字符串脚本:

SELECT
     [Rno]
    ,[Name] AS StringWithSpace
    ,LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([Name],CHAR(32),'()'),')(',''),'()',CHAR(32)))) AS StringWithoutSpace
FROM tbl_RemoveExtraSpaces
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

  • 这本应该被否决,因为答案不是OP所要求的,而是得到了4次赞成。欢迎使用堆栈溢出。 (3认同)
  • 您是否意识到OP想要删除所有空格而不是用单个空格替换多个空格? (2认同)

小智 9

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
Run Code Online (Sandbox Code Playgroud)

你可以使用"column_name"或column_name

谢谢

Subroto

  • 我不得不使用`select replace(replace(replace(varcharColumn,char(13),''),char(10),''),' ','')`从`varchar`中删除所有换行符和空格柱子。如果我使用 '\n' 和 '\r' 而不是 char(13) 和 char(10) 它不起作用。 (3认同)

小智 8

replace(replace(column_Name,CHAR(13),''),CHAR(10),'')
Run Code Online (Sandbox Code Playgroud)


Bha*_*ani 6

如果 LTRM 或 RTRM 没有删除正常空格,请尝试这样使用

LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(Column_data, CHAR(9), ''), CHAR(10), ''), CHAR(13), '')))
Run Code Online (Sandbox Code Playgroud)


Far*_*han 5

如果字符串中有多个空格,则替换可能无法正常工作。为此,应使用以下功能。

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
Run Code Online (Sandbox Code Playgroud)

例:

select dbo.RemoveAllSpaces('aa  aaa       aa aa                 a')
Run Code Online (Sandbox Code Playgroud)

输出:

aaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,我在您上面的假设下工作,即REPLACE一次只能删除一个,在这种情况下,此函数将导致输入多个空格的无限循环。实际上,while循环根本没有必要。 (7认同)
  • Farhan,如果REPLACE以您认为的方式工作,那么@jjoelson的第一条评论是正确的。否则,您将陷入无限循环,因为InputStr永远不会改变,因此ResultStr将始终是第一个REPLACE结果。您的代码起作用的原因是因为只需要REPLACE 1次。无论您向它扔什么字符串,都永远不会第二次调用它。添加一个计数器,并在每次迭代时打印出来。它将始终为1。REPLACE(InputStr,'','')将通过一次调用删除每个空格。 (2认同)

小智 5

这可以消除字符串上的空格:

UPDATE
    tablename
SET
    columnname = replace(columnname, ' ', '');
Run Code Online (Sandbox Code Playgroud)