我需要修剪空格(包括制表符、换行符等)。来自字符串而不影响内部空白的。例如:
foo
bar
baz
会变成
foo
bar
baz
当然,LTRIM
/ RTRIM
是不够的,因为它们只删除空格。这里有几篇文章展示了如何使用REPLACE
方法来处理其他字符(例如这一个),但这当然也会删除内部字符。我在这里找不到一个例子来演示如何从字符串中只删除前导和尾随空格字符。
发布于 2014-09-29 06:01:42
SQLCLR很容易处理此功能。您可以编写执行简单String.Trim()
的自己的函数,也可以从SQL#库下载已经编写的函数,例如String_Trim()
函数。我是SQL#的作者,但是String_Trim
函数(和许多其他的函数,包括正则表达式等等)都可以在免费版本中找到。
String_Trim()
从字符串的两端移除空格(制表符、换行符、回车和空格),而不触及非空格字符之间的任何空格。如果您复制并粘贴下面的示例代码,您将看到,在非空白字符之前和之后,以及它们之间,是每种类型的空格字符的混合(好吧,标签在这里转换为空格,所以我必须显式地放入制表符中)。
它很简单,如:
PRINT N'~~' + SQL#.String_Trim(N' ' + NCHAR(9) + N'
' + NCHAR(9) + N' gfgj
lf ' + NCHAR(9) + N'
g
' + NCHAR(9) + N' g
' + NCHAR(9) + N' ') + N'~~';
输出:
~~gfgj
lf
g
g~~
发布于 2014-09-28 23:46:57
这是我目前的解决方案,但我欢迎其他建议。对于VARCHAR
值:
DECLARE @str varchar(8000) ,
@pat varchar(100) = '%[^ ' + CHAR(9) + '-' + CHAR(13) + ']%';
SET @str = /* load value */
SET @str = SUBSTRING( @str , PATINDEX( @pat , @str ) ,
DATALENGTH( @str ) -
PATINDEX( @pat , @str ) -
PATINDEX( @pat , REVERSE( @str )) + 2 );
但是,由于NVARCHAR
字符占用2个字节,在这种情况下,需要将DATALENGTH
除以2:
DECLARE @str nvarchar(4000) ,
@pat varchar(100) = '%[^ ' + CHAR(9) + '-' + CHAR(13) + ']%';
SET @str = /* load value */
SET @str = SUBSTRING( @str , PATINDEX( @pat , @str ) ,
DATALENGTH( @str ) / 2 -
PATINDEX( @pat , @str ) -
PATINDEX( @pat , REVERSE( @str )) + 2 );
请注意,此处使用的模式(@pat
)仅涵盖ASCII字符。这足以满足我的需求,但如果需要完全的Unicode支持,则可以扩展该模式。有关完整列表,请参见维基百科:空白字符。
当然,为了便于重用,可以很容易地将其转换为UDF。
发布于 2014-09-29 04:49:26
你应该试试这个:
DECLARE @testString varchar(255)
set @testString = 'MY STRING '
/*I always use this like a final solution*/
SET @testString = REPLACE(REPLACE(REPLACE(@testString, CHAR(9), ''), CHAR(10), ''), CHAR(13), '')
SELECT @testString
/*
CHAR(9) - Tab
CHAR(10) - New Line
CHAR(13) - Carriage Return
*/
https://stackoverflow.com/questions/26090758
复制相似问题