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

如何让SELECT语句中的LIKE查询实现不区分大小写匹配?

ABAP Open SQL 实现大小写不敏感LIKE查询的解决方案

你之前写法报错的核心原因是 ABAP Open SQL 不允许在LIKE操作符的右侧使用SQL函数/表达式,仅支持常量、主机变量(带@前缀的ABAP变量),此外直接写数据库特有的排序规则名(如utf8_general_ci)不符合Open SQL数据库无关的语法规范。


通用兼容方案(支持ABAP 7.40 SP05及以上版本,适配所有数据库类型)

你只需要提前在ABAP层把搜索字符串转成小写,再在WHERE条件中仅对查询列调用LOWER函数即可,写法如下:

" 提前把搜索参数转小写,再拼接通配符
DATA(tst_string) = '%' && to_lower( importedParamter ) && '%'.

IF anotherParameter IS NOT INITIAL.
  IF importedParamter IS NOT INITIAL.
    SELECT * FROM <table1> as p
      INNER JOIN <table2> as q on q~column1 = p~column1
      WHERE p~column2 = @anotherParameter
      " 仅对数据库列调用LOWER函数,右侧传提前转好小写的主机变量
      AND LOWER( q~column2 ) LIKE @tst_string
      INTO CORRESPONDING FIELDS OF TABLE @anotherName.
  ENDIF.
ENDIF.

高版本可选方案(ABAP 7.55及以上版本支持)

如果你的系统版本足够高,可以直接用Open SQL原生支持的不区分大小写排序规则,不需要手动转大小写,写法如下:

DATA(tst_string) = '%' && importedParamter && '%'.

IF anotherParameter IS NOT INITIAL.
  IF importedParamter IS NOT INITIAL.
    SELECT * FROM <table1> as p
      INNER JOIN <table2> as q on q~column1 = p~column1
      WHERE p~column2 = @anotherParameter
      AND q~column2 LIKE @tst_string COLLATE #NON_CASE_SENSITIVE
      INTO CORRESPONDING FIELDS OF TABLE @anotherName.
  ENDIF.
ENDIF.

注意事项

  • LOWER转大小写的方案兼容性最好,几乎所有当前在用的ABAP系统都支持
  • 如果你的查询数据量非常大,建议给对应字段创建基于LOWER(columnName)的函数索引,避免全表扫描影响性能

内容的提问来源于stack exchange,提问作者user16365685

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:07