sqlite - SQLite Instr 提供的值与预期不同
问题描述
我正在尝试使用 instr 在查询中提取子字符串。以下命令:
SELECT instr(ZSYNCPAYMENT, '{"t')
FROM ZPAYMENT;
提供 64 的结果。
我将 SELECT ZSYNCPAYMENT FROM ZPAYMENT 的输出复制并粘贴到十六进制编辑器中,并选择了最多包含 { 符号的字节数,这是我上面的 instr 函数的一部分。所选字节数显示为十进制长度 71。为什么我的 instr 输出显示值为 64?下面的屏幕截图是上面 SELECT ZSYNCPAYMENT 的输出。
解决方案
来自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
查看简化的演示。
推荐阅读
- r - 情感者 0 而不是 NA
- python - 如何计算垂直(房屋)墙壁上的太阳辐射?
- loops - 无法读取数字引脚的状态
- java - POI 电子表格本地化
- sql-server - 从 SQL Server 导出到 CSV 的额外引号
- javascript - 动态加载字体。Javascript:不存在“Access-Control-Allow-Origin”标头
- amazon-sagemaker - Sagemaker 自定义模型:创建端点时出现“模型数据存档太大”错误
- javascript - 使用spring控制器将数组列表传回struts jsp?
- r - 基于多列中的直接和间接相似性对变量进行分组的快速方法
- javascript - 当我用入口文件中的导入替换 html 中的脚本标签时,为什么我的 webpack 包这么大?