1

我正在尝试使用 instr 在查询中提取子字符串。以下命令:

SELECT instr(ZSYNCPAYMENT, '{"t') 
FROM ZPAYMENT;

提供 64 的结果。

我将 SELECT ZSYNCPAYMENT FROM ZPAYMENT 的输出复制并粘贴到十六进制编辑器中,并选择了最多包含 { 符号的字节数,这是我上面的 instr 函数的一部分。所选字节数显示为十进制长度 71。为什么我的 instr 输出显示值为 64?下面的屏幕截图是上面 SELECT ZSYNCPAYMENT 的输出。

在此处输入图像描述

4

1 回答 1

1

来自INSTR()

instr(X,Y) 函数查找字符串 X 中第一次出现的字符串 Y,并返回前面的字符数加 1,如果在 X 中找不到 Y,则返回 0。或者,如果 X 和 Y 都是 BLOB,则返回 instr (X,Y) 返回比第一次出现 Y 之前的字节数多一个,如果 Y 没有出现在 X 中的任何位置,则返回 0。

在您使用的十六进制编辑器中,您会看到字符串位置'{"t'ZSYNCPAYMENT.
这与字符串包含 unicode 字符时的字符差异不同,我怀疑您在图像中发布的字符串就是这种情况

如果您希望将字节的差异同时转换为sZSYNCPAYMENT和s:'{"t'BLOB

SELECT INSTR(
         CAST(ZSYNCPAYMENT AS BLOB), 
         CAST('{"t' AS BLOB)
       ) 
FROM ZPAYMENT 

查看简化的演示

于 2021-04-15T15:40:59.077 回答