Like 只是在开头或结尾或中间匹配字符串的一部分
并且倾斜(~)与正则表达式匹配
为了进一步解释,让我们创建一个表并插入一些值
# create table users(id serial primary key, name character varying);
现在让我们在表格中插入一些值
# insert into users (name) VALUES ('Alex'), ('Jon Snow'), ('Christopher'), ('Arya'),('Sandip Debnath'), ('Lakshmi'),('alex@gmail.com'),('@sandip5004'), ('lakshmi@gmail.com');
现在你的表格应该是这样的
id | name
----+-------------------
1 | Alex
2 | Jon Snow
3 | Christopher
4 | Arya
5 | Sandip Debnath
6 | Lakshmi
7 | alex@gmail.com
8 | lakshmi@gmail.com
9 | @sandip5004
案例喜欢
# select * from users where name like 'A%';
id | name
----+------
1 | Alex
4 | Arya
(2 rows)
如您所见,'A%' 只会获取名称以大写 A 开头的值。
# select * from users where name like '%a%';
id | name
----+-------------------
4 | Arya
5 | Sandip Debnath
6 | Lakshmi
7 | alex@gmail.com
8 | lakshmi@gmail.com
如您所见,'%a%' 只会为我们提供名称之间包含 a 的值。
# select * from users where name like '%a';
id | name
----+------
4 | Arya
如您所见,'%a' 只会为我们获取名称以 a 结尾的值。
案例~(倾斜)
# select * from users where name ~* 't';
id | name
----+----------------
3 | Christopher
5 | Sandip Debnath
如您所见,name ~* 't' 只会为我们提供名称为 t 的值。
~ 表示区分大小写,~* 表示不区分大小写
所以
# select * from users where name ~ 'T';
id | name
----+------
(0 rows)
上面的查询给了我们 0 行,因为 T 没有与任何条目匹配
现在让我们考虑一种情况,我们只需要获取电子邮件 ID,我们不知道邮件 ID 有什么,但我们知道电子邮件的模式,即会有一些字母或数字或 _ 或 。或 - 然后是 @,然后是更多的字母或数字或 - 然后。然后com or in or org etc 我们可以使用正则表达式创建模式。
现在让我们尝试使用正则表达式获取结果
# select * from users where name ~* '[a-z0-9\.\-\_]+@[a-z0-9\-]+\.[a-z]{2,5}';
id | name
----+-------------------
7 | alex@gmail.com
8 | lakshmi@gmail.com
类似地,我们可以获取一些中间有空格的名称
#select * from users where name ~* '[a-z]+\s[a-z]+';
id | name
----+----------------
2 | Jon Snow
5 | Sandip Debnath
[az]+ 表示可以有从 a 到 z 的任何字母,+ 表示它可能出现 1 次或多次, \s 表示之后之间会有一个空格,然后是一组可能出现的字母1 次或多次。
希望这个详细的分析有所帮助。