使用 DB2 检索不区分大小写的 SQL 选择查询

Posted

技术标签:

【中文标题】使用 DB2 检索不区分大小写的 SQL 选择查询【英文标题】:Retrieve Case Insensitive SQL Select Query using DB2 【发布时间】:2019-10-08 08:43:33 【问题描述】:

下面的sql select查询从表中检索数据。

SELECT DISTINCT  FRUIT_NAME,FRUIT_ID  FROM Fruits ORDER BY FRUIT_NAME ASC

我使用了“ORDER BY FRUIT_NAME ASC”,它根据 Assending order 获取结果,如下所示。

结果:

苹果

香蕉

芒果

杏子

蓝莓

我想要一个不区分大小写的搜索结果,如下所示。

苹果

杏子

香蕉

蓝莓

芒果

我不想使用 upper() 或 lower(),因为它可能会影响较大表数据的性能。

COLLATE NOCASE 也不适用于 db2。以下是我使用时遇到的错误 db2 中 select sql 查询中的 COLLATE NOCASE。

1) [Code: -104, SQL State: 42601]  ILLEGAL SYMBOL "COLLATE".

有没有办法使用 db2 从 sql select 查询中检索不区分大小写的数据?

【问题讨论】:

您的 Db2 服务器平台是什么(Z/os、i 系列、Linux/Unix/Windows)?您的 Db2 服务器版本是什么?这些事实应该始终存在于您的问题中。 感谢您的回复。我使用的是 DB2 10.0.22,平台是 windows。 您的问题经常被问到。做你的研究。常见的方法包括使用生成的列(并按生成的列排序),或使用索引扩展,或按 collat​​ion_key_bit() 函数排序,并为您的语言/地区提供合适的参数。示例链接 developer.ibm.com/articles/making-db2-case-insensitive 和 ibm.com/developerworks/data/library/techarticle/dm-0712stolze/… 【参考方案1】:

您可以使用LOWER 函数订购:

SELECT DISTINCT FRUIT_NAME, FRUIT_ID
FROM Fruits
ORDER BY LOWER(FRUIT_NAME);

当然,这意味着ORDER BY 步骤不能使用索引。如果您需要快速订购而不考虑大小写,您可以考虑存储全小写版本的列,作为一种选择。

【讨论】:

以上是关于使用 DB2 检索不区分大小写的 SQL 选择查询的主要内容,如果未能解决你的问题,请参考以下文章

由于计数,db2/sql 查询不允许从连接中选择静态值

mysql模糊查询区分大小写

sql语法有没有区分大小写?

sql语句查询字母字段时不区分大小写

SQL Server 不区分大小写的查询

django orm总结--解决查询结果不区分大小写问题