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

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

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

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

公司名称如"Amit Tech Corp "

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

【问题讨论】:

    标签: sql sql-server-2008 trailing


    【解决方案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))

                    【讨论】:

                    【解决方案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),'')
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-04-27
                      • 1970-01-01
                      • 2015-07-06
                      • 1970-01-01
                      相关资源
                      最近更新 更多