PostgreSQL:如何制作;不区分大小写“;查询
有没有办法在PostgreSQL中编写不区分大小写的查询,例如,我希望下面3个查询返回相同的结果PostgreSQL:如何制作;不区分大小写“;查询,postgresql,Postgresql,有没有办法在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
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 LOWER(name)=LOWER('Administrator')
在比较之前,使用函数将字符串转换为小写
试试这个:
SELECT id
FROM groups
WHERE LOWER(name)=LOWER('Administrator')
最常见的方法是对搜索字符串和数据使用小写或大写。但这有两个问题
createindex-ON-groups(name::citext)创建不区分大小写的索引代码>。(但请参见下文。)
Create创建一个小写索引
分组索引(下(名称))代码>。这样做之后,您可以利用
包含以下查询的索引的名称:SELECT id FROM groups,其中LOWER(name)=LOWER('ADMINISTRATOR')代码>,或从以下组中选择id(名称)=“管理员”但是,代码>必须记住使用LOWER()
citext模块不提供真正的不区分大小写的数据类型。相反,它的行为就像每个字符串都是小写的。也就是说,它的行为就像您对每个字符串调用了
lower()
,如上面的数字3所示。优点是程序员不必记住使用小写字符串。但是,在决定使用citext之前,您需要阅读文档中的“字符串比较行为”和“限制”部分。最常见的方法是将搜索字符串和数据以小写或大写形式显示。但这有两个问题
createindex-ON-groups(name::citext)创建不区分大小写的索引代码>。(但请参见下文。)
Create创建一个小写索引
分组索引(下(名称))代码>。这样做之后,您可以利用
包含以下查询的索引的名称:SELECT id FROM groups,其中LOWER(name)=LOWER('ADMINISTRATOR')代码>,或从以下组中选择id(名称)=“管理员”但是,代码>必须记住使用LOWER()
citext模块不提供真正的不区分大小写的数据类型。相反,它的行为就像每个字符串都是小写的。也就是说,它的行为就像您对每个字符串调用了
lower()
,如上面的数字3所示。优点是程序员不必记住使用小写字符串。但是,在决定使用citext之前,您需要阅读文档中的“字符串比较行为”和“限制”部分。您也可以阅读ILIKE
关键字。它有时非常有用,尽管它不符合SQL标准。有关更多信息,请参见此处:您还可以阅读ILIKE
关键字。它有时非常有用,尽管它不符合SQL标准。有关更多信息,请参见此处:您可以使用ILIKE
。i、 e
SELECT id FROM groups where name ILIKE 'administrator'
您可以使用
ILIKE
。i、 e
SELECT id FROM groups where name ILIKE 'administrator'
使用
ILIKE
而不是LIKE
SELECT id FROM groups WHERE name ILIKE 'Administrator'
使用
ILIKE
而不是LIKE
SELECT id FROM groups WHERE name ILIKE 'Administrator'
还可以使用POSIX正则表达式,如
SELECT id FROM groups where name ~* 'administrator'
选择'asd'~*'asd'
返回t
您还可以使用POSIX正则表达式,如
SELECT id FROM groups where name ~* 'administrator'
选择'asd'~*'asd'
返回t
使用~*
可以大大提高性能,并具有INSTR的功能
SELECT id FROM groups WHERE name ~* 'adm'
返回名称包含或等于“adm”的行。使用
~*
可以通过INSTR的功能大大提高性能
SELECT id FROM groups WHERE name ~* 'adm'
返回名称包含或等于“adm”的行。我喜欢这种情况下的工作:
SELECT id
FROM groups
WHERE name ILIKE 'Administrator'
我喜欢这种情况下的工作:
SELECT id
FROM groups
WHERE name ILIKE 'Administrator'
如果您的Postgres安装附带citext,请尝试citext类型。这是不区分大小写的文本,对于这个问题的新手来说,官方postgres文档包含这里给出的所有答案,以及一些其他选项。先生,请将接受的答案重新分配给@Arun所做的答案。它不那么复杂,在应用后也不会带来很多麻烦