You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让DuckDB实现不区分大小写的文本搜索?

DuckDB 实现不区分大小写文本搜索的方案

以下几种方法可以解决DuckDB默认文本搜索区分大小写的问题:

  • 统一大小写转换匹配
    和PostgreSQL的通用方案一致,通过lower()函数将字段值和搜索条件都转换为小写后匹配:

    SELECT * FROM bar WHERE lower(foo) = lower('My name');
    

    注意:如果foo列存在索引,这种写法无法利用索引,适合小数据集或无性能要求的场景。

  • 设置不区分大小写的排序规则
    DuckDB支持为列指定NOCASE排序规则,这是最接近MySQL全局配置调整效果的方案,设置后列的所有相等比较都会自动忽略大小写:

    • 创建表时指定列规则:
      CREATE TABLE bar (foo VARCHAR COLLATE NOCASE);
      
    • 修改现有列的规则:
      ALTER TABLE bar ALTER COLUMN foo SET DATA TYPE VARCHAR COLLATE NOCASE;
      

    设置完成后,直接执行原查询即可实现不区分大小写匹配,且能正常利用列上的索引,性能更优。

  • 使用ILIKE操作符(模糊搜索场景)
    如果是模糊搜索需求,可使用ILIKE替代LIKE,它默认支持不区分大小写匹配:

    -- 完全匹配
    SELECT * FROM bar WHERE foo ILIKE 'My name';
    -- 包含指定文本的模糊匹配
    SELECT * FROM bar WHERE foo ILIKE '%name%';
    

目前DuckDB暂未提供类似PostgreSQLcitext的专用不区分大小写文本类型,但上述方案已能覆盖绝大多数不区分大小写搜索的需求。

内容的提问来源于stack exchange,提问作者Morris de Oryx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 23:35:56