8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

ruud 2月前

195 0

我在 SQL Server 表中名为“公司名称”的列中有尾随空格。此列中的所有数据都有尾随空格。我想删除所有这些空格,并且我希望数据没有任何尾随空格......

我在 SQL Server 表中名为 Company Name .

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

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

公司名称就像 "Amit Tech Corp "

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

帖子版权声明 1、本帖标题:在 SQL Server 中删除尾随空格并更新列
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由ruud在本站《sql-server》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 修剪短小.sql

    /* Summary: Trims the data of selected columns in a selected table
    * Works for: SQL Server Management Studio v18.10 
    * 
    * How to use:
    * ctrl + F, 
    * click V on the left side of textbox
    * copy a field's name from list below > paste in Search
    * write your field's name > Replace in Search
    * click Replace All
    * repeat for all fields
    *
    * Fields to replace:
    * MyDatabase - set to your database name
    * MyTable - set to your table name
    * Column1 - set to your table's column name
    * Column2 - set to your table's column name
    */
    
    USE [MyDatabase]
    GO
    UPDATE [dbo].[MyTable] SET
        [Column1] = TRIM([Column1])
        ,[Column2] = TRIM([Column2])
    GO
    

    TrimLong.sql - 我先写的。它的工作方式与上面的版本类似。

    /* Summary:
    * Trim the data of selected columns in a selected table
    *
    * Works for: SQL Server Management Studio v18.10 
    * 
    * How to use:
    * ctrl + F, 
    * click V on the left side of textbox
    * copy a field's name from list below > paste in Search
    * write your field's name > Replace in Search
    * click Replace All
    * repeat for all fields
    *
    * Fields to replace:
    * MyDatabase - set to your database name
    * MyTable - set to your table name
    * MyColumnId - set to your table's column ID name
    * Column1 - set to your table's column name
    * Column2 - set to your table's column name
    */
    
    USE [MyDatabase]
    GO
    
    --Number of rows in the table
    DECLARE @RowCnt INT;
    SET @RowCnt = (SELECT COUNT(*) FROM [dbo].[MyTable])
    
    --Row ID for a loop
    DECLARE @RowId INT;
    SET @RowId = 1
    
    --Print number of rows to Update
    PRINT 'Number of rows:' + convert(varchar(4), @RowCnt)
    
    --Loop for each row
    WHILE @RowId <= @RowCnt
    BEGIN
        --Print Row ID
        PRINT 'RowId:' + convert(varchar(4), @RowId)
    
        --Trim a row data for selected Columns
        UPDATE [dbo].[MyTable] SET
            [Column1] = (SELECT TRIM([Column1]) from [dbo].[MyTable] WHERE MyColumnId = @RowId)
            ,[Column2] = (SELECT TRIM([Column2]) from [dbo].[MyTable] WHERE MyColumnId = @RowId)
            WHERE MyColumnId = @RowId
    
        --Increase Row ID
        SET @RowId = @RowId + 1
    END
    GO
    

    使用示例

    当您足够聪明,可以创建 char(15) 字段,但后来发现您正在读取一个带有空格尾的值时,您会将其更改为 nvarchar(15)。

  • 如果您的数据类型是 Varchar,这些都不起作用。请确保将您的数据类型更改为 Nvarchar。

  • 要删除 Enter

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

    删除 Tab

    Update [table_name] set
    [column_name]=REPLACE([column_name],CHAR(9),'')
    
  • 这是一个 Oracle 查询,OP 使用的是 Microsoft SQL Server

  • SELECT TRIM(ColumnName) FROM dual;
    
  • 这是一个 Oracle 查询,OP 使用的是 Microsoft SQL Server

  • SQL Server 不支持 Trim() 函数。但您可以使用 LTRIM() 和 RTRIM()。如果您想同时使用两者,可以使用 LTRIM(RTRIM(ColumnName))

  • 例子:

    SELECT TRIM('   Sample   ');
    

    结果: 'Sample'

    UPDATE TableName SET ColumnName = TRIM(ColumnName)
    
  • TRIM() 可从 SQL2017 learn.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql 获得(并且可以选择删除除 SPACE 之外的字符)

  • Trim 默认不可用,它是 DAX 功能:msdn.microsoft.com/en-us/library/gg413422.aspx

  • 引用 12

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

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

    SQL Server TRIM 函数

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

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

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

    --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;
    
  • 我使用 ETL 从 Excel 文件中提取数据后遇到了同样的问题,最后我找到了解决方案:

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

    希望有帮助;)

  • 引用 15

    如果您正在使用 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'

  • J4N 2月前 0 只看Ta
    引用 16

    使用 TRIM SQL 函数。

    如果您正在使用 SQL Server,请尝试:

    SELECT LTRIM(RTRIM(YourColumn)) FROM YourTable
    
  • update MyTable set CompanyName = rtrim(CompanyName)
    
  • 下面是一个不错的脚本,可以动态修剪表上的所有 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
    
  • SQL Server 不支持 Trim() 函数。

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

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

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

    更新:2022 年

    我 7 年前(2015 年)就回答过这个问题。当时 SQL Server 中还没有直接的修剪功能。

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

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

    update tablename
    set ColumnName= TRIM(ColumnName)
    

    不过如果你用的是老版本的话,你还是得用我7年前提到的方式。

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

    UPDATE
        TableName
    SET
        ColumnName = RTRIM(ColumnName)
    

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

    UPDATE
        TableName
    SET
        ColumnName = LTRIM(RTRIM(ColumnName))
    
返回
作者最近主题: