10

就我而言,Presto 连接到已配置为不区分大小写的 MySQL 数据库。但是通过 Presto 进行的任何搜索似乎都区分大小写。

问题:

1) 有没有办法将 Presto 搜索配置为区分大小写?如果没有,是否可以在 Presto-MySQL 连接器中进行更改以使搜索不区分大小写?

2)如果底层数据库不区分大小写,Presto 搜索是否也不应该区分大小写?(我假设 Presto 只生成查询计划,实际执行发生在底层数据库上)

示例:考虑下面的 MySQL 表。

name
____
adam

Alan


select * from table where name like '%a%'
// returns adam, Alan on MySQL
// returns only adam on Presto

select * from table where name = 'Adam'
// returns adam on MySQL
// returns NIL on Presto
4

2 回答 2

17

您必须通过将比较值标准化为下限或上限来明确要求不区分大小写的比较,如下所示:

select * from table where lower(name) like '%a%';

select * from table where lower(name) = lower('Adam');
于 2017-04-01T19:16:50.550 回答
6

您可以使用regexp_like(), 并在正则表达式前面加上(?i)不区分大小写

select 
  * 
from table_name 
where 
  regexp_like(column_name, '(?i)fOO');  -- column contains fOO or FOO

或者

select 
  * 
from table_name 
where 
  regexp_like(column_name, '(?i)^Foo'); -- column starts with fOO or FOO
于 2019-11-26T18:57:38.403 回答