我正在使用 SQL Server 2008,我正在寻找一个类似的函数ltrim
,rtrim
它还将删除前导和尾随制表符、双空格、回车、换行等。
那里有许多函数,但我发现的函数都有限制,例如将字符串截断为 8000 个字符。例如(根据一些评论):
SQL SERVER – 2008 – 增强的 TRIM() 函数 – 删除尾随空格、前导空格、空格、制表符、回车、换行
其中一条评论提出了一个更好的解决方案,但- 1
导致incorrect syntax
错误,我不知道为什么。
CREATE FUNCTION dbo.SuperTrimLeft(@str varchar(MAX)) RETURNS varchar(MAX)
AS
BEGIN
IF (ASCII(LEFT(@str, 1)) < 33) BEGIN
SET @str = STUFF(@str, 1, PATINDEX('%[^'+CHAR(0)+'-'+CHAR(32)+']%', @str) – 1, ' ');
END;
RETURN @str;
END;
所以我的问题是,完成上述任务的最佳方法是什么?
最好的方法可能是创建一个 CLR 函数并使用 .NET 框架库。
下面是 TSQL 尝试。
应用和定界符只是为了
[
更]
容易验证那里没有潜伏的空白。当您感到满意时,请移除这些。因为您从网站复制粘贴,并且页面不显示连字符/减号,而是显示破折号。
您只需将光标放在它后面并删除它,然后在键盘上输入减号,代码就会起作用。
如果您想修改注释中的代码以执行正确的修剪方案,您可以像文章那样做,并创建一个只反转字符串两次的函数(从文章中复制代码但更改为 use
SuperTrimLeft
)。到目前为止给出的两个答案都需要至少一次反转字符串来解决右手边。
这个方法不行。
接受的答案不处理仅包含换行符的字符串。
根据 Martin 的解决方案,这是一个可以正确处理它的函数。