Sql 右边有不必要的 space 的数据

Sql data with Unnecessary space on right

这是我的 Sql Fiddle 模式和数据。 SQL 我写的查询工作正常并且 returns 数据。

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

但令人困惑的是,当我在 table 中插入数据时从未创建时,为什么我有 "space"。 例如从查询中查看这部分代码:

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

SubString 函数中我必须删除一些 space 才能得到结果 LEN([xml])-8.

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

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

  2. 我有一行数据 0PKR101。它的总长度是'7'。所以在 SQL Fiddle 中的 SubString 函数中,它的起始位置是 41 在数据中的 R 之后并在跳过最后 2 位数字的同时获取它的长度, Len() 函数应该是 Len(xml)-1。但是,我必须在这里使用 -6 来跳过最后 2 位数字。我怎样才能让它像 len(xml)-1 那样工作..

您忘记了您的“177PKR”

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

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

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

当您想要从末尾开始的子字符串时,一般情况是:

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

其中 x 是您想要的距末尾的偏移量。