删除 SQLServer 中的尾随空格并更新列

在名为 Company Name的 SQLServer 表中的一列中有尾随空格。

此列中的所有数据都有尾随空格。

我想删除所有这些,我想要没有任何尾随空格的数据。

公司名称类似于 "Amit Tech Corp "

我希望公司名称是 "Amit Tech Corp"

475778 次浏览

只是修剪尾随空间,您应该使用

UPDATE
TableName
SET
ColumnName = RTRIM(ColumnName)

但是,如果您想修剪所有的前导和尾随空间,然后使用这个

UPDATE
TableName
SET
ColumnName = LTRIM(RTRIM(ColumnName))
update MyTable set CompanyName = rtrim(CompanyName)

使用 TRIM SQL 函数。

如果使用 SQLServer,请尝试:

SELECT LTRIM(RTRIM(YourColumn)) FROM YourTable

这里有一个很好的脚本,可以动态地 TRIM 表中的所有 varchar 列:

--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
SELECT TRIM(ColumnName) FROM dual;

这取决于您使用的是哪个版本的 SQLServer。

在 SQLServer2008r2、2012和2014中,您可以简单地使用 TRIM(CompanyName)

SQLServerTRIM 函数

在其他版本中,必须使用 set CompanyName = LTRIM(RTRIM(CompanyName))

例如:

SELECT TRIM('   Sample   ');

结果: 'Sample'

UPDATE TableName SET ColumnName = TRIM(ColumnName)

SQLServer 不支持 Trim ()函数。

但是可以使用 LTRIM ()删除前导空格,使用 RTRIM ()删除尾随空格。

可以使用它作为 LTRIM (RTRIM (ColumnName))来删除这两个。

update tablename
set ColumnName= LTRIM(RTRIM(ColumnName))

更新: 2022年

7年前(2015年)我就回答了这个问题。当时在 SQL 服务器中没有直接的裁剪功能。

但是从 SQLServer2017开始,他们引入了 < strong > Trim () 函数。

因此,任何使用 SQLServer2017或更高版本的用户都可以轻松地完成以下工作。

update tablename
set ColumnName= TRIM(ColumnName)

然而,如果你使用旧版本,你仍然必须使用我7年前提到的方式。

如果您正在使用 SQLServer (从 vNext 开始)Azure SQL 数据库,那么您可以使用以下查询。

SELECT TRIM(ColumnName) from TableName;

对于其他 数据库,可以使用以下查询。

SELECT LTRIM(RTRIM(ColumnName)) from TableName

从左侧移除空格

例如: select LTRIM(' test ') as trim = 'test '

RTRIM-从右边移除空格

例如: select RTRIM(' test ') as trim = ' test'

在使用 ETL 从 excel 文件中提取数据之后,我遇到了同样的问题 最终我在那里找到了解决办法:

Https://www.codeproject.com/tips/330787/ltrim-rtrim-doesn-t-always-work

希望能有所帮助;)

移除 进来:

Update [table_name] set
[column_name]=Replace(REPLACE([column_name],CHAR(13),''),CHAR(10),'')

移除 标签:

Update [table_name] set
[column_name]=REPLACE([column_name],CHAR(9),'')

如果我们还想处理空格和不需要的制表符-

检查并尝试下面的脚本(单元测试)-

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