# 下划线'_'匹配任意单个字符 # 百分号'%'匹配任意数目的字符 select * from my_test_copy where name_people like '_满_'; #有值 select * from my_test_copy where name_people like '%满%'; #有值,百分号可以匹配任意数目的字符
select * from my_test_copy where name_people like '%楼'; #有值,百分号可以匹配任意数目的字符 select * from my_test_copy where name_people like '_楼'; #为空,因为下划线只能代表一个字符 select * from my_test_copy where name_people like '_满楼'; #有值
\2. 正则表达式:’rlike’ 和 ‘regexp’同义,用于标识正则表达式模式
(1)’rlike’ 和 ‘regexp’
1 2 3
select 'abc' regexp 'ab'; # regexp左操作数是要匹配的字符串,右操作数是匹配模式 select * from my_test_copy where name_people regexp '花'; select * from my_test_copy where name_people rlike '花';
(2)直接匹配
1 2
select 'abc' regexp 'b'; #返回1 select * from my_test_copy where name_people regexp '满'; #有值
(3)’^’符号,匹配开头,从字符串开始进行匹配
1 2
select * from my_test_copy where name_adress regexp '^天坛'; #为空,用于查询以....开头的字符串,而没有以'天坛'开头的字符串 select * from my_test_copy where name_adress regexp '^北'; #有值,用于查询以....开头的字符串
(4)’$’符号,匹配结尾
1 2
select * from my_test_copy where name_adress regexp '北$'; #为空,用于查询以....结尾的字符串 select * from my_test_copy where name_adress regexp '京$'; #有值
(5)点号 ‘.’ 符号,匹配任意一个字符
1 2
select * from my_test_copy where name_adress regexp '北.'; #有值 select * from my_test_copy where name_adress regexp '.京$'; #有值
(6)’+’符号,+前面的模式至少出现1次或以上
1 2
select * from my_test_copy where name_adress regexp 'beijing+'; #有值 select * from my_test_copy where name_adress regexp '京+'; #有值
(7)’‘符号,前面的模式出现0次或以上
1 2
select * from my_test_copy where name_adress regexp '北京*'; #有值,'北'出现,且'京'接着'北'出现0次以上 select * from my_test_copy where name_adress regexp '人*'; #有值,出现0次
(8)’?’符号,’?’前面的模式出现0次或1次
1 2 3 4 5 6 7
select 'abc' regexp '^(ab)?c$'; #有值 select 'aaabc' regexp '^a*b?c$'; #有值 select 'ababc' regexp '^(ab)+c$'; #有值 select * from my_test_copy where name_adress regexp '人?'; #有值,出现0次 select * from my_test_copy where name_adress regexp '京?'; #有值,出现1次 select * from my_test_copy where name_adress regexp '(山庄)?'; #有值,出现0次或1次(山庄) select * from my_test_copy where name_adress regexp '山庄?'; #有值,出现了'山'和1次'庄'
(13)若’[]’需要匹配’-‘,则’-‘需要放在’[]’两端,放在中间可能会报错:[Err] 3697 - The regular expression contains an [x-y] character range where x comes after y.
1 2 3
select 'aaa-ccc-ddd' regexp 'a[-]'; #有值 select 'aaa-ccc-ddd' regexp 'a[-cdf]'; #有值,匹配到'a-' select 'aaa-ccc-ddd' regexp 'a[d-a]'; #[Err] 3697 - The regular expression contains an [x-y] character range where x comes after y.
select * from my_test_copy where name_adress regexp '[^北京]'; #表示不能只有'北京' select * from my_test_copy where name_adress regexp '^[^北]'; #表示开头不含'北' select * from my_test_copy where name_adress regexp '万梅[^山]'; #表示不含'万梅山'
(15)’|’ 匹配分隔的任意一个字符
1 2
select 'abc' regexp 'b|a|c'; select * from my_test_copy where name_adress regexp '北京|南京'; #表示含有'北京'或'南京'的