删除尾随空格并在SQL Server中的列中更新


147

我在SQL Server表的列中有尾随空格Company Name

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

我想删除所有这些,并且我希望数据没有任何尾随空格。

公司名称如 "Amit Tech Corp "

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

Answers:


296

尝试 SELECT LTRIM(RTRIM('Amit Tech Corp '))

LTRIM -删除字符串左侧的任何前导空格

RTRIM -从右侧删除任何空格

例如:

update table set CompanyName = LTRIM(RTRIM(CompanyName))

12
应该注意的是,TRIM现在是SQL Server 2017+中受支持的方法。
DJ Sipe

3
我正在使用SQL Management Studio v17.8.1,当我为TRIM函数获取Intellisense时,执行该函数时,它表示无效。我不得不使用上面的代码。奇怪的。
DesertFoxAZ '18

2
@DesertFoxAZ SQL Management Studio版本不是SQL Server版本
Jonatan Dragon,

30

要只修剪尾随空格,您应该使用

UPDATE
    TableName
SET
    ColumnName = RTRIM(ColumnName)

但是,如果要修剪所有前导和尾随空格,请使用此

UPDATE
    TableName
SET
    ColumnName = LTRIM(RTRIM(ColumnName))

15

好吧,这是一个很好的脚本,可以动态地修剪表上的所有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


2

使用TRIM SQL函数。

如果您使用的是SQL Server,请尝试:

SELECT LTRIM(RTRIM(YourColumn)) FROM YourTable

2

SQL Server不支持Trim()函数。

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

可以将其用作LTRIM(RTRIM(ColumnName))删除两者。

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

2

如果您使用的是SQL Server(从vNext开始)Azure SQL数据库,则可以使用以下查询。

SELECT TRIM(ColumnName) from TableName;

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

SELECT LTRIM(RTRIM(ColumnName)) from TableName

LTRIM-从左侧删除空格

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

RTRIM-从右侧删除空格

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




0

例:

SELECT TRIM('   Sample   ');

结果: 'Sample'

UPDATE TableName SET ColumnName = TRIM(ColumnName)

3
SQL Server不支持Trim()函数。但是您可以使用LTRIM()和RTRIM()。如果要一起使用,则可以使用LTRIM(RTRIM(ColumnName))
Thilina Sandunsiri 2015年

这是一个Oracle查询,OP使用Microsoft SQL Server
Wouter,2016年


0

要删除Enter

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),'')

0

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

检查并尝试以下脚本(经过单元测试)-

--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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.