Sql-Server

修剪尾隨空格、製表符、換行符、輸入符等

  • March 31, 2022

我正在使用 SQL Server 2008,我正在尋找一個類似的函式ltrimrtrim它還將刪除前導和尾隨製表符、雙空格、輸入、換行等。

那裡有許多函式,但我發現的函式都有限制,例如將字元串截斷為 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 嘗試。

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)

應用和定界符只是為了[]容易驗證那裡沒有潛伏的空白。當您感到滿意時,請移除這些。

引用自:https://dba.stackexchange.com/questions/137200