SQLite Instr 提供与预期不同的值
SQLite Instr provides different value than expected
我正在尝试使用 instr 在查询中提取子字符串。以下命令:
SELECT instr(ZSYNCPAYMENT, '{"t')
FROM ZPAYMENT;
结果为 64。
我将 SELECT ZSYNCPAYMENT FROM ZPAYMENT 的输出复制并粘贴到一个十六进制编辑器中,并选择了直到并包括 { 符号的字节数,这是我上面的 instr 函数的一部分。所选字节数显示为 71 的十进制长度。为什么我的 instr 输出显示值为 64?下面的屏幕截图是上面 SELECT ZSYNCPAYMENT 的输出。
来自INSTR()
:
The instr(X,Y) function finds the first occurrence of string Y within
string X and returns the number of prior characters plus 1, or 0 if Y
is nowhere found within X. Or, if X and Y are both BLOBs, then
instr(X,Y) returns one more than the number bytes prior to the first
occurrence of Y, or 0 if Y does not occur anywhere within X.
在您使用的十六进制编辑器中,您会看到字符串 '{"t'
的位置与 ZSYNCPAYMENT
的值之间的差异 字节 .
当字符串包含 unicode 字符时,这与 characters 的差异不同,我怀疑您在图片中发布的字符串就是这种情况。
如果你想要字节的差异,将 ZSYNCPAYMENT
和 '{"t'
都转换为 BLOB
s:
SELECT INSTR(
CAST(ZSYNCPAYMENT AS BLOB),
CAST('{"t' AS BLOB)
)
FROM ZPAYMENT
查看简化版 demo.
我正在尝试使用 instr 在查询中提取子字符串。以下命令:
SELECT instr(ZSYNCPAYMENT, '{"t')
FROM ZPAYMENT;
结果为 64。
我将 SELECT ZSYNCPAYMENT FROM ZPAYMENT 的输出复制并粘贴到一个十六进制编辑器中,并选择了直到并包括 { 符号的字节数,这是我上面的 instr 函数的一部分。所选字节数显示为 71 的十进制长度。为什么我的 instr 输出显示值为 64?下面的屏幕截图是上面 SELECT ZSYNCPAYMENT 的输出。
来自INSTR()
:
The instr(X,Y) function finds the first occurrence of string Y within string X and returns the number of prior characters plus 1, or 0 if Y is nowhere found within X. Or, if X and Y are both BLOBs, then instr(X,Y) returns one more than the number bytes prior to the first occurrence of Y, or 0 if Y does not occur anywhere within X.
在您使用的十六进制编辑器中,您会看到字符串 '{"t'
的位置与 ZSYNCPAYMENT
的值之间的差异 字节 .
当字符串包含 unicode 字符时,这与 characters 的差异不同,我怀疑您在图片中发布的字符串就是这种情况。
如果你想要字节的差异,将 ZSYNCPAYMENT
和 '{"t'
都转换为 BLOB
s:
SELECT INSTR(
CAST(ZSYNCPAYMENT AS BLOB),
CAST('{"t' AS BLOB)
)
FROM ZPAYMENT
查看简化版 demo.