【问题标题】:Remove trailing empty space in a field content删除字段内容中的尾随空格
【发布时间】:2010-12-24 07:18:02
【问题描述】:

我正在使用 SQL Server MSDE 2000。我有一个名为 notes 的字段,类型为 nvarchar(65)。

所有记录中的内容是“某事”,内容后面有一个额外的空格(为清楚起见,引用了引号)。我使用了以下命令。

UPDATE TABLE1 
   SET notes = RTRIM(LTRIM(notes))

但它不起作用。有没有其他方法可以做到这一点?

【问题讨论】:

  • “不起作用”是什么意思?它应该....
  • 不确定。查询正确执行,我收到消息“(受影响的 12539 行)”。但该字段的值仍然带有尾随空格。
  • 您正在查看正确的服务器实例、表?我以前做过……
  • RTRIM 应该可以正常工作。你确定后面的字符实际上是一个空格吗?您可能需要检查您正在使用的排序规则和字节值。

标签: sql sql-server tsql sql-server-2000 trim


【解决方案1】:

您确定查询不起作用吗?试试:

SELECT TOP 100 '~'+ t.notes +'~'
  FROM TABLE1 t

TOP 100 会将结果限制在前 100 行,足以了解输出中是否真的有空格。如果有,并且 RTRIM/LTRIM 没有删除它 - 那么你没有处理空白字符。在这种情况下,请尝试:

UPDATE TABLE1
  SET notes = REPLACE(notes, 
                      SUBSTRING(notes, PATINDEX('%[^a-zA-Z0-9 '''''']%', notes), 1), 
                      '')
WHERE PATINDEX('%[^a-zA-Z0-9 '''''']%', notes) <> 0

【讨论】:

  • 这个有效。这个和我用过的有什么区别?
  • @Bharanidharan:它会删除不可打印的 ASCII 字符,而 LTRIM/RTRIM 不会。
  • 很好。什么是不可打印的 ACSII 字符?和空格有区别吗?
  • 前 32 个值是非打印控制字符,例如回车(十进制值 13)和换行(十进制值 10):csgnetwork.com/asciiset.html
【解决方案2】:

... 您可以将查询结果复制/粘贴到字段末尾的空白“”(空格)到您的替换语句中,然后从那里更新所有内容。

update TABLE1
set notes = replace(notes, ' ', '')

【讨论】:

    【解决方案3】:

    如果您需要修剪所有列中的所有空格,您可以使用此脚本动态执行此操作:

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

    【讨论】:

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