安装PostgreSQL之后,PostgreSQL会创建一个名为“postgres”的用户,创建一个名为“postgres”的数据库。我们就可以使用这个默认的库做实验。
首先建表并插入数据:
CREATE TABLE public.user(
ID SERIAL PRIMARY KEY NOT NULL,
UserID varchar(100) NOT NULL,
UserName varchar(100) NOT NULL,
PhoneNumber varchar(20) NOT NULL
);
INSERT INTO public."user" (userid, username, phonenumber) VALUES('u1', 'tom', '123');
INSERT INTO public."user" (userid, username, phonenumber) VALUES('u2', 'Tom', '123');
INSERT INTO public."user" (userid, username, phonenumber) VALUES('u3', 'TOM', '321');
INSERT INTO public."user" (userid, username, phonenumber) VALUES('u3', 'Jane', '456');
INSERT INTO public."user" (userid, username, phonenumber) VALUES('u3', 'jane', '654');
INSERT INTO public."user" (userid, username, phonenumber) VALUES('u3', 'Janey', '789');
INSERT INTO public."user" (userid, username, phonenumber) VALUES('u3', 'janey', '987');
使用普通的like
查询
select * from public."user" where username like '%O%';
查询结果:
id | userid | username | phonenumber |
---|---|---|---|
3 | u3 | TOM | 321 |
使用like查询需要%
号作为占位符,且PostgreSQL默认区分大小写。
使用不区分大小写的ilike
查询
select * from public."user" where username ilike '%O%';
查询结果:
id | userid | username | phonenumber |
---|---|---|---|
1 | u1 | tom | 123 |
2 | u2 | Tom | 123 |
3 | u3 | TOM | 321 |
使用不需要占位符的~*
查询
select * from public."user" where username ~* 'O';
查询结果:
id | userid | username | phonenumber |
---|---|---|---|
1 | u1 | tom | 123 |
2 | u2 | Tom | 123 |
3 | u3 | TOM | 321 |
PostgreSQL正则表达式
select * from public."user" where username SIMILAR TO '%(t|j)%';
查询结果:
id | userid | username | phonenumber |
---|---|---|---|
1 | u1 | tom | 123 |
5 | u3 | jane | 654 |
7 | u3 | janey | 987 |
总结
PostgreSQL的模糊匹配和模式查询非常强大,这里只是举了几个简单的小例子做了一下对比。更多的用法可以访问下面的参考链接了解。
如果感觉正则表达式还不能满足你的要求,可以尝试着写一个自定义函数。
另外,由于这些查询属于pgsql的方言,如果要考虑以后的数据库迁移成本的话,谨慎使用。