2012-03-08 58 views
2

我在SQL Server中遇到问题。我想用Ltrim和Rtrim去除空间。SQL Server微调功能

我的查询是这样的

select len('test  ') 

返回6

select len(rtrim(ltrim('test  '))) 

返回6

为什么它不删除的空间?

我已经检查了ASCII值这个空间是32

任何帮助吗?

谢谢

+1

你可以仔细检查它们实际上是空格吗?正如@MarekGrzenkowicz所建议的那样,如果它们是可以解释它的标签...... – AdaTheDev 2012-03-08 13:39:28

回答

7

因为此字符串中没有空格 - test之后有两个水平制表符\t)。

Tabs, not spaces

+0

优秀的答案。当然可以解释6的Len()数,但是ascii代码呢? +1 – markblandford 2012-03-08 13:40:48

+0

除非OP提供更多信息,否则无法猜测。 – 2012-03-08 13:47:56

0

实际上,空间越来越修整在这两种情况下,这就是由SQL服务器标准化。 (LEN做微调)

+0

它没有被修剪,它没有被计入第一种情况。 – alykhalid 2012-03-08 13:13:48

2

没有引起太大意义,我为:

SELECT LEN('test ') 

应该返回4,而不是6 - LEN()将计数尾随空格。

而如果你做的事:

SELECT DATALENGTH('test ') 

将返回6作为DATALENGTH 确实计数尾随空格。

+0

它返回6是因为字符串中没有空格 - [这些是制表符](http://stackoverflow.com/a/9618274/95)。 – 2012-03-08 13:31:40

+0

@MarekGrzenkowicz - 这将解释它。虽然OP说他检查过,他们是ascii 32(空间) – AdaTheDev 2012-03-08 13:36:28

+0

让我们拭目以待OP是否回复您的评论。对我来说,提示是第一个查询返回6,而字符串看起来比那个长。 – 2012-03-08 13:46:27