如何使 LIKE 表现得不区分大小写?

Posted

技术标签:

【中文标题】如何使 LIKE 表现得不区分大小写?【英文标题】:How to make LIKE behave case-insensitive? 【发布时间】:2022-01-03 15:34:37 【问题描述】:

我有一个importedParameter,我想在SELECT 的列内搜索它。

但是现在它是区分大小写的,我怎样才能使它不区分大小写

我尝试了多种方法:AND LOWER(columnName) LIKE LOWER(@lv_string)AND columnName LIKE @tst_string COLLATE utf8_general_ci 以及其他一些东西,但得到了这个错误:

以 LOWER(Q.

开头的位置需要布尔表达式

示例代码:

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
      INTO CORRESPONDING FIELDS OF TABLE @anotherName
  ENDIF.
ENDIF.

【问题讨论】:

所以AND LOWER( q~column2 ) LIKE @tst_string 没用?这会导致错误还是只是不起作用? 另外,您使用的是什么 SAP_BASIS 版本?在最近的版本中,OpenSQL 增加了一些相当多的功能,但并不是每个人都在使用这些功能。 A Boolean expression is required in positions starting with LOWER(Q. - 这是我的语法错误。用 LOWER 尝试它 我可能会为您提供解决方案,但它需要 SAP_BASIS 7.51。你能确认你至少有那个版本吗? 是的,已确认。感谢您尝试帮助我! 【参考方案1】:

我相信 Regex 是您的首选:LIKE_REGEXPR:

SELECT * 
  FROM <table1> as p
 INNER JOIN <table2> as q on q~column1 = p~column1
 WHERE p~column2 = @anotherParameter
   AND like_regexpr( pcre = '\bparam\b', value = q~column2, CASE_SENSITIVE = 'X' ) = '1'
  INTO TABLE DATA(@anotherName).

它有CASE_SENSITIVE 表示尊重(或不尊重)大小写的谓词。

虽然这仅在 since ABAP 7.55 可用,但在较低版本上你就不走运了。

【讨论】:

哈,刚学到东西...谢谢 Suncatcher... 不客气!【参考方案2】:

这段代码对我来说很好用:

SELECT * 
  FROM adrp
  WHERE LOWER( name_first ) LIKE 'phi%'
  INTO TABLE @DATA(results).

它会找到我的个人数据条目(以及另一个“Philipp”和“Philip”的那些),即使我们都用大写字母 P 拼写。

LIKE LOWER( 'Phi%' )不起作用,但是当你无法控制输入时,可以在select前将其转换为小写:

DATA(tst_string) = 'Phi%'.
TRANSLATE tst_string TO LOWER CASE.
SELECT *
  FROM adrp
  WHERE LOWER( name_first ) LIKE @tst_string
  INTO TABLE @DATA(results).

发布:7.54

我不确定哪个版本特别允许在 WHERE 子句中使用 LOWER 等功能。根据 cmets 的说法,它应该从 7.51 开始工作。

【讨论】:

LOWER 在 ABAP 7.51 中添加。 @SandraRossi 这是否包括在 WHERE 子句中的使用?我相信曾经有一段时间,列列表允许的功能比 WHERE 或 ON 中允许的功能多得多。但我可能弄错了。 请注意,如果您的意思是自 ABAP 7.50(“任何 WHERE 条件的左侧”)起允许 SQL 函数出现在 WHERE 子句的左侧。

以上是关于如何使 LIKE 表现得不区分大小写?的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7 - 不区分大小写的 LIKE 与 db_select

MySQL LIKE 区分大小写,但我不希望它是 [重复]

SQL Server 的 LIKE 运算符是不是区分大小写?

LIKE运算符是否与MSSQL Server区分大小写?

Sequelize - 不区分大小写

如何使用 PredicateBuilder、EF Core 5 和 Postgresql 10+ 执行不区分大小写和重音的 LIKE(子字符串)查询?