Sql数据右侧有不必要的空格

时间:2017-07-03 06:57:29

标签: sql-server select complextype

这是我的Sql Fiddle with Schema and Data。我编写的SQL Query工作正常并返回数据。

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

但令人困惑的是为什么我有"空间"当我在表格中插入数据时从未创建过。    例如从查询中查看此部分代码:

                                (SUBSTRING
                                (
                                [xml]
                                ,CHARINDEX('P',[xml]) + 3
                                ,LEN([xml])-8
                                ) 
SubString函数中的

我必须删除一些空格才能得到结果LEN([xml])-8

让我们假设两种情况:(两者都来自SQL Fiddle插入查询)

  1. 我有一行数据177PKR3572427992899。它的总长度是' 19。所以在上面使用的SubString函数中,它的起始位置是7,即在3之后的R,并且为了在跳过最后2位数时得到它的长度,Len()函数应该是Len(xml)-1。但是,相反,我必须使用-8跳过最后2位数。从这个空间来自哪里,我真的很困惑?让我们现在看第二个。

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

1 个答案:

答案 0 :(得分:2)

你忘了你的“177PKR”

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

因此,您的长度为{total length} - 2 - ({index of P}+3),在第一种情况下等于{total length} - 8,在第二种情况下等于{total length} - 6

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

一般情况下,您希望从末尾开始的子字符串是:

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

其中x是你想要的结尾。