GWR*_*GWR 3 sql-server functions
我正在使用 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;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,完成上述任务的最佳方法是什么?
最好的方法可能是创建一个 CLR 函数并使用 .NET 框架库。
下面是一个 TSQL 尝试。
DECLARE @Pattern NVARCHAR (50) = N'%[^' +
/*List from http://stackoverflow.com/a/18169122/73226 */
NCHAR(0x0009) + /*tab*/
NCHAR(0x000A) + /*line feed*/
NCHAR(0x000B) + /*line tabulation*/
NCHAR(0x000C) + /*form feed*/
NCHAR(0x000D) + /*carriage return*/
/*Various spaces from https://www.cs.tut.fi/~jkorpela/chars/spaces.html */
NCHAR(0x0020) +
NCHAR(0x00A0) +
NCHAR(0x1680) +
NCHAR(0x180E) +
NCHAR(0x2000) +
NCHAR(0x2001) +
NCHAR(0x2002) +
NCHAR(0x2003) +
NCHAR(0x2004) +
NCHAR(0x2005) +
NCHAR(0x2006) +
NCHAR(0x2007) +
NCHAR(0x2008) +
NCHAR(0x2009) +
NCHAR(0x200A) +
NCHAR(0x200B) +
NCHAR(0x202F) +
NCHAR(0x205F) +
NCHAR(0x3000) +
NCHAR(0xFEFF) +
N']%' COLLATE Latin1_General_100_BIN2;
WITH T(String) AS
(
SELECT ' leading only' union all
SELECT '
Line breaks
' union all
SELECT ' tab and space ' union all
SELECT ''
)
SELECT '[' + SUBSTRING(String,Start,len(String + '..') - Start - Finish) + ']'
FROM T
CROSS APPLY
(
SELECT PATINDEX(@Pattern,String),
PATINDEX(@Pattern,REVERSE(String))
)ca(Start, Finish)
Run Code Online (Sandbox Code Playgroud)
在[和]分隔符只是应用于使其更容易验证没有空白潜伏在那里。当你高兴时删除这些是这种情况。
| 归档时间: |
|
| 查看次数: |
9186 次 |
| 最近记录: |