IBM Informix SQL 中的 LIKE

Posted

技术标签:

【中文标题】IBM Informix SQL 中的 LIKE【英文标题】:LIKE in IBM Informix SQL 【发布时间】:2021-08-18 04:31:18 【问题描述】:

我在表“order”中定义了一个 varchar 列“qty”,其中包含 2 行数据,如下所示

qty
3
3 1/9

当我尝试使用选择查询时

select * from order where qty like '3 %';

返回具有数量 33 1/9 的两行,而我认为我只会得到与我的查找匹配的 3 1/9,例如“3 %”, 我什至尝试使用trim(qty) like '3 %' 也得到相同的结果;我得到了两个记录。 第一行 3 后没有空格。

不知道为什么?有人可以帮我吗?

【问题讨论】:

我认为问题在于 Informix 有效地填充列并在填充列上进行比较。尾随空格是一个复杂的问题。在普通 CHAR(n) 类型中,如果您插入一个具有 m 个字节 (m @JonathanLeffler 感谢您提供信息,我了解 char 数据类型的填充,但这里我有 varchar 数据类型,我检查了记录末尾是否有空格(对于第一个记录上面显示的示例),它只有 3 个数据 我不是在为正在发生的事情辩护;我只是说明正在发生的事情。你提供弹药来改变它。会有阻力(“向后兼容性”)。 您使用的是哪个版本的 Informix,您在哪个平台上使用它?系统存在bug CQ idsdb00109716;如果您有支持,您可以注册一个反对它的案例,但要获得修复,您需要升级。该错误已被创建,仅;它还没有被安排,更不用说修复了。 Informix 版本:Linux 平台上的 IBM Informix Dynamic Server 版本 12.10.FC7 【参考方案1】:

尝试: select * from order where qty like '3_%'。

【讨论】:

为什么是反斜杠? 是的,我可以试试,问题是旧系统的其中一个搜索有类似的 sql(如上所述),但是我们正在实施的新系统是在 mysql 中,所以我不能更改旧系统 sql,但同时在 mysql 上我必须解释用户输入包含空格 *(所有变体) 所以在上面的informix中,将返回2条记录,一条只是“3”,另一条是“3 1/9”,但在mysql中'3_%'将返回全部3'3 % ' 将只返回 3 1/9 记录(qty = '3' 或 qty like '3 %'); mysql 将返回与 infomix 在 informix 中返回的 '3 %' 完全相同的结果。【参考方案2】:

在 Java 中,您可以将一个参数添加到您的 jdbc url: ;IFX_TRIMTRAILINGSPACES=0

例如:

jdbc:informix-sqli://dbhost:service/database:INFORMIXSERVER=ifxserver;IFX_LOCK_MODE_WAIT=1;IFX_TRIMTRAILINGSPACES=0

希望它能让 LIKE 以你想要的方式工作

【讨论】:

以上是关于IBM Informix SQL 中的 LIKE的主要内容,如果未能解决你的问题,请参考以下文章

informix SQL查询咨询

在 IBM.Data.Informix 2.81.0.0 中找不到 IfxBulkCopy

使用 python 的 ibm_db 连接到 informix

Informix 查询计划

尝试使用 JDBC 连接到 IBM 的 Informix docker 版本

Spark 从 IBM Informix 数据库读取数据“在日期值的字符串表示中指定的标记不足”