如何使 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
SQL Server 的 LIKE 运算符是不是区分大小写?
如何使用 PredicateBuilder、EF Core 5 和 Postgresql 10+ 执行不区分大小写和重音的 LIKE(子字符串)查询?