修剪SQL Server 2008中的文本字符串

时间:2010-08-15 11:51:00

标签: sql-server sql-server-2008

我在SQL Server 2008数据库中有一个表。该表有一个名为'Name'的nvarchar(256)列。不幸的是,此字段中的值包含额外的空格。例如,名称“Bill”实际上存储在表格中的“Bill”中。

我想更新此表中的所有记录以删除多余的空格。但是,我很惊讶地发现SQL没有TRIM功能。

如何一次更新所有记录以删除多余的空格?

谢谢!

7 个答案:

答案 0 :(得分:97)

您有RTRIMLTRIM功能。您可以将它们组合起来以获得所需的修剪功能。

UPDATE Table
SET Name = RTRIM(LTRIM(Name))

答案 1 :(得分:16)

您可以使用RTrim函数修剪右侧的所有空格。使用LTrim从左侧修剪所有空格。例如

UPDATE Table SET Name = RTrim(Name)

或左右修剪

UPDATE Table SET Name = LTrim(RTrim(Name))

答案 2 :(得分:4)

SQL Server没有TRIM功能,而是有两个。一个用于从字符串的“前”(LTRIM)专门修剪空格,另一个用于修剪字符串“末尾”(RTRIM)中的空格。

以下内容将更新表中的每条记录,修剪varchar / nvarchar字段的所有无关空间(在前端或末尾):

UPDATE 
   [YourTableName]
SET
   [YourFieldName] = LTRIM(RTRIM([YourFieldName]))

(奇怪的是,SSIS(Sql Server Integration Services)确实只有一个TRIM函数!)

答案 3 :(得分:2)

我会尝试这样的Trim函数,它考虑了Unicode标准定义的所有空白字符(LTRIM和RTRIM甚至不修剪换行符!):

{{1}}

答案 4 :(得分:1)

我知道这是一个老问题,但我刚刚找到了一个使用LTRIM和RTRIM创建用户定义函数的解决方案。它不处理字符串中间的双重空格。

然而,解决方案是直截了当的:

User Defined Trim Function

答案 5 :(得分:0)

没有答案是真的

真正的答案是编辑列到NVARCHAR,你发现自动修剪执行但是这段代码 更新表 SET Name = RTRIM(LTRIM(Name)) 如果将它与CHAR或NCHAR一起使用,它只能与Nvarchar一起使用

答案 6 :(得分:0)

此功能从左和右修剪字符串。它还会从字符串中删除回车符,这是LTRIM和RTRIM

未执行的操作
IF OBJECT_ID(N'dbo.TRIM', N'FN') IS NOT NULL
    DROP FUNCTION dbo.TRIM;
GO
CREATE FUNCTION dbo.TRIM (@STR NVARCHAR(MAX)) RETURNS NVARCHAR(MAX)
BEGIN
    RETURN(LTRIM(RTRIM(REPLACE(REPLACE(@STR ,CHAR(10),''),CHAR(13),''))))
END;
GO