我在SQL Server 2008数据库中有一个表。该表有一个名为'Name'的nvarchar(256)列。不幸的是,此字段中的值包含额外的空格。例如,名称“Bill”实际上存储在表格中的“Bill”中。
我想更新此表中的所有记录以删除多余的空格。但是,我很惊讶地发现SQL没有TRIM功能。
如何一次更新所有记录以删除多余的空格?
谢谢!
答案 0 :(得分:97)
答案 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创建用户定义函数的解决方案。它不处理字符串中间的双重空格。
然而,解决方案是直截了当的:
答案 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