2017-07-03 55 views
2

这是我的Sql小提琴与模式和数据。我写的SQL查询工作正常,并返回数据。Sql数据右边不需要的空间

http://sqlfiddle.com/#!6/bcf65/4

但困惑是为什么我有当我同时在表插入数据从未创建“空间”。 对于示例View从查询这部分代码:

       (SUBSTRING 
           (
           [xml] 
           ,CHARINDEX('P',[xml]) + 3 
           ,LEN([xml])-8 
           ) 

SubString功能我不得不删除一些空间来获得结果LEN([xml])-8

假设两种情况:(两者都是从SQL小提琴插入查询)

  1. 我有数据177PKR3572427992899一行。它的总长度是'19'。因此,在上面使用的SubString函数中,其起始位置是7,即3在Data中的R之后,并且在跳过最后2位数时获得其长度,Len()函数应该是Len(xml)-1。但是,我必须使用-8来跳过最后2位数字。对于我来说,这个空间从哪里来?现在让我们看看第二个。

  2. 我有一行数据0PKR101。它的总长度是'7'。因此,在SQL Fiddle中的SubString函数中,它的起始位置是4,即在Data中的R之后,并且在跳过最后2位数时获得其长度,Len()函数应该是Len(xml)-1。但是,我必须在这里使用-6来跳过最后2位数字。我怎样才能使它作为len(xml)-1工作,因为它应该是..

+0

我很好奇:你为什么要调用你的列'[xml]',这样标记问题,但我看不到任何XML相关的东西? – Shnugo

+0

@Shnugo对不起,删除了XML标签。那么,这些值从xml文件中提取到列中,所以是... – ARr0w

回答

2

你忘了你的“177PKR”

的第三个参数是长度,你从PKR后开始。

所以你的长度是{total length} - 2 - ({index of P}+3),这在第一种情况下等于{total length} - 8,在第二种情况下等于{total length} - 6

这里有一个丰富多彩的解释: explanation

,当你想从尾的子是一般情况下:

substring(string, offset, length - offset - x) 

其中x是偏移量要从结束。

+0

2 - ({index of P} +3)= -2 -7(7是起始位置)= -9。当我用'Len()'使用负值时,它是从左边删除空格还是从右边删除空格? – ARr0w

+1

如果它的索引为1,我犯了一个错误,那么它就是P + 2的索引。 – satibel

+0

恩,可能是索引值为0,你是我的男人是正确的。 – ARr0w