为什么起始位置不是正数时子串结果不同?

问题描述 投票:0回答:1

当我使用Sybase系统(15.0+版本)时,当起始位置不是自然数时,查询结果不同。

如果我只选择字符串值,结果显示如下。

SELECT  SUBSTR('123456',  1, 3)  AS C1
     ,  SUBSTR('123456',  0, 3)  AS C2
     ,  SUBSTR('123456', -1, 3)  AS C3
     ,  SUBSTR('123456', -2, 3)  AS C4
;

 C1  | C2 | C3 | C4
--------------------
 123 | 12 | 1  |

但是,如果我通过搜索特定表来使用此查询,结果会有所不同。

SELECT  TOP 1
        SUBSTR('123456',  1, 3)  AS C1
     ,  SUBSTR('123456',  0, 3)  AS C2
     ,  SUBSTR('123456', -1, 3)  AS C3
     ,  SUBSTR('123456', -2, 3)  AS C4
  FROM  TEMP_TABLE
;

 C1  | C2  | C3 | C4
---------------------
 123 | 123 | 6  | 56

我已经查过Sybase手册,但没有关于这种情况的明确解释。

有人可以解释一下吗?

sql database sybase substr
1个回答
0
投票
  1. 问题的第一个样本和结果具有以下逻辑:
  • 字符串'123456'在Substring()函数中用作参数时,起始点为-1,返回的字符数为3,结果为1。
  • 原因是 Substring 函数将字符串中的第一个字符视为位置 1。当您要求起始位置 -1 并希望返回 3 个字符时,该函数返回位置 (-1, 1, 2),其中第一个 (位置-1) 不存在,其余的(位置 1 和 2)是“12”。
  • 起始位置 -2 和 3 的长度相同 - 位置 -2 和 -1 不存在,第三个是 1
  1. 第二个示例看起来像 Oracle,行为也像 Oracle,并且 Oracle 有详细记录。
© www.soinside.com 2019 - 2024. All rights reserved.