SQL Server空格处理

SQL Server 的 ltrim 和 rtrim 函数只会取消 char(32) 的字符, char(9) 之类的字符则不会剔除。今天在处理论坛的一个bug时,发现数据多了空格,就是char(9)在作怪。

一个演示SQL代码:

declare @s nvarchar(50)
select @s = char(32)+char(9)+'*'
print('%'+@s+'%')
select @s = ltrim(rtrim(@s))
print('%'+@s+'%')
print (str(len(@s)))

而 C# 中则没有类似问题,它剔除了很多非 char(32) 的空格。

演示代码:

static void Main(string[] args)
{
    string s = string.Format("{0}{1}*", (char)32, (char)9);
    Console.WriteLine("%" + s + "%");
    Console.WriteLine(s.Length);
    s = s.Trim();
    Console.WriteLine("%" + s + "%");
    Console.WriteLine(s.Length);
    Console.ReadLine();
}

MSDN上一些空格的资料:

下表列出了被 Trim 方法移除的空白字符。第一列列出了字符的 Unicode 名称,第二列列出了标识该字符的 Unicode 码位的十六进制表示法。
(请注意,尽管传递特定字符时静态 Char.IsWhiteSpace(Char) 方法返回了 true,但该字符不一定被 Trim 方法移除。(作者注:MSDN上这句话很让我困惑,下面2个表中,Char.IsWhiteSpace中的空格都出现在Trim 中的空格了呀?))

Unicode 名称Unicode 码位
CHARACTER TABULATIONU+0009
LINE FEEDU+000A
LINE TABULATIONU+000B
FORM FEEDU+000C
CARRIAGE RETURNU+000D
SPACEU+0020
NEXT LINEU+0085
NO-BREAK SPACEU+00A0
OGHAM SPACE MARKU+1680
EN QUADU+2000
EM QUADU+2001
EN SPACEU+2002
EM SPACEU+2003
THREE-PER-EM SPACEU+2004
FOUR-PER-EM SPACEU+2005
SIX-PER-EM SPACEU+2006
FIGURE SPACEU+2007
PUNCTUATION SPACEU+2008
THIN SPACEU+2009
HAIR SPACEU+200A
ZERO WIDTH SPACEU+200B
LINE SEPARATORU+2028
PARAGRAPH SEPARATORU+2029
IDEOGRAPHIC SPACEU+3000
ZERO WIDTH NO-BREAK SPACEU+FEFF

会被 Char.IsWhiteSpace( 认为是空白字符的包括以下Unicode 字符:

  • SpaceSeparator 类别的成员,该类别包括 SPACE 字符 (U+0020)。
  • LineSeparator 类别的成员,该类别只包括 LINE SEPARATOR 字符 (U+2028)。
  • ParagraphSeparator 类别的成员,该类别只包括 PARAGRAPH SEPARATOR 字符 (U+2029)。
  • 字符 CHARACTER TABULATION (U+0009)、LINE FEED (U+000A)、LINE TABULATION (U+000B)、FORM FEED (U+000C)、CARRIAGE RETURN (U+000D)、NEXT LINE (U+0085) 和 NO-BREAK SPACE (U+0000A0)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值