Informix DB LIKE 查询中的 UPPER 和 LOWER 函数不适用于 table 中的所有条目
UPPER and LOWER functions in Informix DB LIKE queries do not work with all entries in the table
背景资料:
- IBM Informix 动态服务器版本 12.10.FC14WE
- DB_LOCALE=et_EE.utf8
- Table 有一个 ID 主键,没有索引
- 列数据类型 lvarchar (-1)
table 列的名称类似于“FIRST COMPANY”、“SECOND COMPANY”、“Third”。要查找名称匹配,正在使用 UPPER 函数。问题示例:
SELECT * FROM companies WHERE UPPER(name) LIKE 'FIRST%';
- 没有结果
SELECT * FROM companies WHERE UPPER(name) LIKE 'SECOND%';
- 给出预期结果(第二公司)
SELECT * FROM companies WHERE name LIKE 'FIRST%';
- 给出预期结果(第一家公司)
SELECT * FROM companies WHERE UPPER(name) LIKE 'FIRST%' OR name LIKE 'FIRST%'
- 没有结果
什么会导致这种行为以及如何解决?也许同一数据库中的条目 table 在某些方面有所不同?
如问题评论中所述,可能存在某种数据损坏,可以通过删除和重新创建有问题的条目来修复(更新无效)。由于围绕此的系统相当复杂并且涉及遗留技术,我们没有深入研究以找出根本原因。由于其他一些需要和考虑,我们创建了一个单独的列,其中公司名称始终为大写,并调整了必要的 select 查询以在没有 UPPER
功能的情况下使用它。
背景资料:
- IBM Informix 动态服务器版本 12.10.FC14WE
- DB_LOCALE=et_EE.utf8
- Table 有一个 ID 主键,没有索引
- 列数据类型 lvarchar (-1)
table 列的名称类似于“FIRST COMPANY”、“SECOND COMPANY”、“Third”。要查找名称匹配,正在使用 UPPER 函数。问题示例:
SELECT * FROM companies WHERE UPPER(name) LIKE 'FIRST%';
- 没有结果SELECT * FROM companies WHERE UPPER(name) LIKE 'SECOND%';
- 给出预期结果(第二公司)SELECT * FROM companies WHERE name LIKE 'FIRST%';
- 给出预期结果(第一家公司)SELECT * FROM companies WHERE UPPER(name) LIKE 'FIRST%' OR name LIKE 'FIRST%'
- 没有结果
什么会导致这种行为以及如何解决?也许同一数据库中的条目 table 在某些方面有所不同?
如问题评论中所述,可能存在某种数据损坏,可以通过删除和重新创建有问题的条目来修复(更新无效)。由于围绕此的系统相当复杂并且涉及遗留技术,我们没有深入研究以找出根本原因。由于其他一些需要和考虑,我们创建了一个单独的列,其中公司名称始终为大写,并调整了必要的 select 查询以在没有 UPPER
功能的情况下使用它。