安裝PostgreSQL之后,PostgreSQL會創(chuàng)建一個名為“postgres”的用戶薯嗤,創(chuàng)建一個名為“postgres”的數(shù)據(jù)庫豪墅。我們就可以使用這個默認(rèn)的庫做實(shí)驗(yàn)。
首先建表并插入數(shù)據(jù):
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%';
查詢結(jié)果:
id | userid | username | phonenumber |
---|---|---|---|
3 | u3 | TOM | 321 |
使用like查詢需要%
號作為占位符铣口,且PostgreSQL默認(rèn)區(qū)分大小寫滤钱。
使用不區(qū)分大小寫的ilike
查詢
select * from public."user" where username ilike '%O%';
查詢結(jié)果:
id | userid | username | phonenumber |
---|---|---|---|
1 | u1 | tom | 123 |
2 | u2 | Tom | 123 |
3 | u3 | TOM | 321 |
使用不需要占位符的~*
查詢
select * from public."user" where username ~* 'O';
查詢結(jié)果:
id | userid | username | phonenumber |
---|---|---|---|
1 | u1 | tom | 123 |
2 | u2 | Tom | 123 |
3 | u3 | TOM | 321 |
PostgreSQL正則表達(dá)式
select * from public."user" where username SIMILAR TO '%(t|j)%';
查詢結(jié)果:
id | userid | username | phonenumber |
---|---|---|---|
1 | u1 | tom | 123 |
5 | u3 | jane | 654 |
7 | u3 | janey | 987 |
總結(jié)
PostgreSQL的模糊匹配和模式查詢非常強(qiáng)大,這里只是舉了幾個簡單的小例子做了一下對比枷踏。更多的用法可以訪問下面的參考鏈接了解。
如果感覺正則表達(dá)式還不能滿足你的要求掰曾,可以嘗試著寫一個自定義函數(shù)旭蠕。
另外,由于這些查詢屬于pgsql的方言旷坦,如果要考慮以后的數(shù)據(jù)庫遷移成本的話掏熬,謹(jǐn)慎使用。