如何将 Presto 搜索配置为不区分大小写?
How to configure Presto searches to be case-insensitive?
在我的例子中,Presto 连接到 MySQL 数据库,该数据库已配置为不区分大小写。但是通过 Presto 进行的任何搜索似乎都区分大小写。
问题:
1) 有没有办法将 Presto 搜索配置为区分大小写in?如果不是,是否可以在 Presto-MySQL 连接器中进行一些更改以使搜索不区分大小写?
2) 如果底层数据库不区分大小写,那么 Presto 搜索不应该也不区分大小写吗? (我假设 Presto 只生成查询计划,实际执行发生在底层数据库上)
示例:考虑 MySQL 上的以下 table。
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
您必须通过将比较值标准化为较低或较高来明确要求不区分大小写的比较,如下所示:
select * from table where lower(name) like '%a%';
select * from table where lower(name) = lower('Adam');
您可以使用 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
在我的例子中,Presto 连接到 MySQL 数据库,该数据库已配置为不区分大小写。但是通过 Presto 进行的任何搜索似乎都区分大小写。
问题:
1) 有没有办法将 Presto 搜索配置为区分大小写in?如果不是,是否可以在 Presto-MySQL 连接器中进行一些更改以使搜索不区分大小写?
2) 如果底层数据库不区分大小写,那么 Presto 搜索不应该也不区分大小写吗? (我假设 Presto 只生成查询计划,实际执行发生在底层数据库上)
示例:考虑 MySQL 上的以下 table。
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
您必须通过将比较值标准化为较低或较高来明确要求不区分大小写的比较,如下所示:
select * from table where lower(name) like '%a%';
select * from table where lower(name) = lower('Adam');
您可以使用 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