如何使 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 可用,但在较低版本上你就不走运了。
我有一个 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 可用,但在较低版本上你就不走运了。