PostgreSQL Like查詢與正規表示式

西召發表於2019-04-20

安裝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的方言,如果要考慮以後的資料庫遷移成本的話,謹慎使用。

參考連結

相關文章