有没有办法在PostgreSQL中编写不区分大小写的查询,例如,我想下面3个查询返回相同的结果。

SELECT id FROM groups where name='administrator'

SELECT id FROM groups where name='ADMINISTRATOR'

SELECT id FROM groups where name='Administrator'

当前回答

我喜欢在这种情况下工作:

SELECT id 
  FROM groups
 WHERE name ILIKE 'Administrator'

其他回答

如果你不仅想要大写/小写,还想要变音符,你可以实现你自己的func:

CREATE EXTENSION unaccent;

CREATE OR REPLACE FUNCTION lower_unaccent(input text)
 RETURNS text
 LANGUAGE plpgsql
AS $function$
BEGIN
    return lower(unaccent(input));
END;
$function$;

调用是then

select lower_unaccent('Hôtel')
>> 'hotel'

我喜欢在这种情况下工作:

SELECT id 
  FROM groups
 WHERE name ILIKE 'Administrator'

在比较之前,使用LOWER函数将字符串转换为小写。

试试这个:

SELECT id 
  FROM groups
 WHERE LOWER(name)=LOWER('Administrator')
-- Install 'Case Ignore Test Extension'
create extension citext;

-- Make a request
select 'Thomas'::citext in ('thomas', 'tiago');

select name from users where name::citext in ('thomas', 'tiago');

使用~*可以通过INSTR的功能极大地提高性能。

SELECT id FROM groups WHERE name ~* 'adm'

返回name包含OR = 'adm'的行。