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

Sql server 右侧有不必要空格的Sql数据,sql-server,select,complextype,Sql Server,Select,Complextype,这是我处理模式和数据的Sql。我编写的SQL查询工作正常并返回数据 但令人困惑的是,当我在表中插入数据时从未创建数据时,为什么会有“空间”。 例如,从查询中查看这部分代码: (SUBSTRING ( [xml] ,CHARINDEX('P',

这是我处理模式和数据的Sql。我编写的SQL查询工作正常并返回数据

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

                                (SUBSTRING
                                (
                                [xml]
                                ,CHARINDEX('P',[xml]) + 3
                                ,LEN([xml])-8
                                ) 
SubString
函数中,我必须删除一些空间才能得到结果
LEN([xml])-8

让我们假设两种情况:(都来自SQL FIDLE insert查询)

  • 我有一行数据
    177PKR3572427992899
    。它的总长度是'19'。因此,在上面使用的子字符串函数中,它的起始位置是
    7
    ,即数据中
    R
    之后的
    3
    ,为了在跳过最后2位的同时获得它的长度,
    Len()
    函数应该是
    Len(xml)-1
    。但是,我必须使用
    -8
    跳过最后两位数字。我真的很困惑这个空间是从哪里来的?现在让我们看看第二个

  • 我有一行数据
    0PKR101
    。它的总长度是“7”。因此,在SQL FIDLE中的子字符串函数中,它的起始位置是
    4
    ,即数据中
    R
    之后的
    1
    ,为了在跳过最后2位的同时获得其长度,
    Len()
    函数应该是
    Len(xml)-1
    。但是,我必须在这里使用
    -6
    跳过最后两位数字。我怎样才能使它像它应该的那样工作呢

  • 你忘了你的“177PKR”

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

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

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

    当您希望从末尾添加子字符串时,一般情况是:

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

    其中,
    x
    是您希望从末端开始的偏移量。

    2-({p}+3的索引)=-2-7(7是起始位置)=-9。当我对
    Len()
    使用负值时,它是从左边删除空格还是从右边删除空格?如果它的索引为1,则我犯了一个错误,那么它的索引为P+2。我很好奇:为什么你要调用你的列
    [xml]
    ,这样标记问题,但我看不到任何与xml相关的内容?@Shnugo抱歉删除了xml标记。这些值是从xml文件中提取到列的,所以是的。。。