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

Posted

技术标签:

【中文标题】在 SQL Server 的列中删除尾随空格和更新【英文标题】:Remove Trailing Spaces and Update in Columns in SQL Server 【发布时间】:2013-01-24 18:36:43 【问题描述】:

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

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

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

公司名称如"Amit Tech Corp "

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

【问题讨论】:

【参考方案1】:

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

LTRIM - 删除字符串左侧的所有前导空格

RTRIM - 删除右边的所有空格

例如:

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

【讨论】:

需要注意的是,TRIM 现在是 SQL Server 2017+ 中支持的方法。 我正在使用 SQL Management Studio v17.8.1,当我为 TRIM 函数获取 Intellisense 时,当我执行它时,它说它无效。我不得不使用上面的代码。很奇怪。 @DesertFoxAZ SQL Management Studio 版本不是 SQL Server 版本【参考方案2】:

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

UPDATE
    TableName
SET
    ColumnName = RTRIM(ColumnName)

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

SQL Server 不支持 Trim() 函数。

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

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

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

更新:2022 年

我在 7 年前(2015 年)回答了这个问题。那个时候SQL server中还没有直接的trim功能。

但是从 SQL Server 2017 开始,他们引入了 Trim() 函数。

因此,任何使用 SQL Server 2017 或更高版本的人都可以轻松执行以下操作。

update tablename
set ColumnName= TRIM(ColumnName)

但是,如果您使用旧版本,您仍然必须使用我在 7 年前提到的方式。

【讨论】:

【参考方案5】:
update MyTable set CompanyName = rtrim(CompanyName)

【讨论】:

【参考方案6】:

使用TRIM SQL 函数。

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

SELECT LTRIM(RTRIM(YourColumn)) FROM YourTable

【讨论】:

【参考方案7】:

如果您使用的是 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'

【讨论】:

【参考方案8】:

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

https://www.codeproject.com/Tips/330787/LTRIM-RTRIM-doesn-t-always-work

希望对你有帮助;)

【讨论】:

【参考方案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;

【讨论】:

【参考方案10】:

嗯,这取决于您使用的 SQL Server 版本。

在 SQL Server 2008 r2、2012 和 2014 中,您可以简单地使用 TRIM(CompanyName)

SQL Server TRIM Function

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

【讨论】:

Trim 默认情况下不可用,这是 DAX 功能:msdn.microsoft.com/en-us/library/gg413422.aspx TRIM() 可从 SQL2017 docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql 获得(并且可以选择删除空格以外的字符)【参考方案11】:

例子:

SELECT TRIM('   Sample   ');

结果:'Sample'

UPDATE TableName SET ColumnName = TRIM(ColumnName)

【讨论】:

SQL Server 不支持 Trim() 函数。但是您可以使用 LTRIM() 和 RTRIM()。如果你想同时使用两者,你​​可以使用 LTRIM(RTRIM(ColumnName)) 这是一个 Oracle 查询,OP 使用的是 Microsoft SQL Server【参考方案12】:
SELECT TRIM(ColumnName) FROM dual;

【讨论】:

这是一个 Oracle 查询,OP 使用的是 Microsoft SQL Server【参考方案13】:

要删除输入

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

【讨论】:

以上是关于在 SQL Server 的列中删除尾随空格和更新的主要内容,如果未能解决你的问题,请参考以下文章

如何更新账单编号栏?或在 sql server 的列中按顺序排列

如何在具有相同 ID 的列中选择不同的值然后删除它们 PHP SQL Server

我们可以阻止 SQL Server 除了忽略值中的尾随空格吗

如何删除前导和尾随空格?

如何使用正则表达式删除尾随空格?

在 Access DAO SQL INSERT 中保留尾随空格