如何使 LIKE 行为不区分大小写?

How to make LIKE behave case-insensitive?

我有一个 importedParameter,我想在 SELECT.

的列中搜索

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

我尝试了多种方法:AND LOWER(columnName) LIKE LOWER(@lv_string)AND columnName LIKE @tst_string COLLATE utf8_general_ci 以及其他一些方法,但出现此错误:

A Boolean expression is required in positions starting with 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.

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

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 等函数。根据评论,它应该从7.51开始工作。

我相信 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 可用,但在较低版本上你就不走运了。