Sql server 右侧有不必要空格的Sql数据
这是我处理模式和数据的Sql。我编写的SQL查询工作正常并返回数据 但令人困惑的是,当我在表中插入数据时从未创建数据时,为什么会有“空间”。 例如,从查询中查看这部分代码:Sql server 右侧有不必要空格的Sql数据,sql-server,select,complextype,Sql Server,Select,Complextype,这是我处理模式和数据的Sql。我编写的SQL查询工作正常并返回数据 但令人困惑的是,当我在表中插入数据时从未创建数据时,为什么会有“空间”。 例如,从查询中查看这部分代码: (SUBSTRING ( [xml] ,CHARINDEX('P',
(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
跳过最后两位数字。我怎样才能使它像它应该的那样工作呢{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文件中提取到列的,所以是的。。。