Sql-Server
修剪尾隨空格、製表符、換行符、輸入符等
我正在使用 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 嘗試。
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)
應用和定界符只是為了
[
更]
容易驗證那裡沒有潛伏的空白。當您感到滿意時,請移除這些。