Jam*_*ame 295 postgresql
有没有办法在PostgreSQL中编写不区分大小写的查询,例如我希望以下3个查询返回相同的结果.
SELECT id FROM groups where name='administrator'
SELECT id FROM groups where name='ADMINISTRATOR'
SELECT id FROM groups where name='Administrator'
Run Code Online (Sandbox Code Playgroud)
Cha*_*ndu 409
在比较之前使用LOWER函数将字符串转换为小写.
试试这个:
SELECT id
FROM groups
WHERE LOWER(name)=LOWER('Administrator')
Run Code Online (Sandbox Code Playgroud)
Moh*_*uzi 183
使用ILIKE而不是LIKE
SELECT id FROM groups WHERE name ILIKE 'Administrator'
Run Code Online (Sandbox Code Playgroud)
Mik*_*ll' 119
最常见的方法是将搜索字符串和数据小写或大写.但是有两个问题.
至少有三种不太常用的解决方案可能更有效.
CREATE INDEX ON groups (name::citext);.(但见下文.)CREATE
INDEX ON groups (LOWER(name));.完成后,你可以利用像这样的查询的索引SELECT id FROM groups WHERE LOWER(name) = LOWER('ADMINISTRATOR');,或者SELECT id FROM groups WHERE LOWER(name) = 'administrator';你必须记住使用LOWER().citext模块不提供真正的不区分大小写的数据类型.相反,它表现得好像每个字符串都是小写的.也就是说,它的行为就像你lower()在每个字符串上调用一样,如上面的数字3所示.优点是程序员不必记住小写字符串.但在决定使用citext之前,您需要阅读文档中的"字符串比较行为"和"限制"部分.
小智 93
你可以用ILIKE.即
SELECT id FROM groups where name ILIKE 'administrator'
Run Code Online (Sandbox Code Playgroud)
Pri*_*mre 51
您还可以阅读ILIKE关键字.它有时非常有用,尽管它不符合SQL标准.有关更多信息,请参见此处:http://www.postgresql.org/docs/9.2/static/functions-matching.html
小智 30
使用ILIKE
select id from groups where name ILIKE 'adminstration';
Run Code Online (Sandbox Code Playgroud)
如果你来的expressjs背景和名称是一个变量使用
select id from groups where name ILIKE $1;
Run Code Online (Sandbox Code Playgroud)
小智 25
你也可以使用POSIX正则表达式,比如
SELECT id FROM groups where name ~* 'administrator'
Run Code Online (Sandbox Code Playgroud)
SELECT 'asd' ~* 'AsD' t
小智 11
在这种情况下ILIKE工作:
SELECT id
FROM groups
WHERE name ILIKE 'Administrator'
Run Code Online (Sandbox Code Playgroud)
小智 6
使用~*INSTR的功能可以大大提高性能。
SELECT id FROM groups WHERE name ~* 'adm'
Run Code Online (Sandbox Code Playgroud)
返回名称包含OR的行等于“ adm”。
| 归档时间: |
|
| 查看次数: |
232916 次 |
| 最近记录: |