使用 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。 您的问题经常被问到。做你的研究。常见的方法包括使用生成的列(并按生成的列排序),或使用索引扩展,或按 collation_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 选择查询的主要内容,如果未能解决你的问题,请参考以下文章