4、通配符過濾、正則表達式

LIKE謂詞:

爲在搜索子句中使用通配符,必須使用 LIKE 操做符。 LIKE 指示MySQL,後跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較。正則表達式

1. %:任何字符出現任意次數。

select column_name1 from table_name where column_name2 like 'jet%';

檢索以jet開頭的數據,默認不區分大小寫。

2. _: 下劃線匹配單個字符

只匹配一個字符,不能多也不能少,不能像%通配符同樣匹配0個或多個。code

3.通配符使用規則

  • 不要過分使用通配符。 若是其餘操做符能達到相同的目的,應該使用其餘操做符。
  • 不要用在開頭。 在確實須要使用通配符時,除非絕對有必要,不然不要把它們用在搜索模式的開始處。把通配符置於搜索模式的開始處,搜索起來是最慢的。
  • 仔細注意通配符的位置

4.正則表達式REGEXP

select column_name from table_name where column_name REGEXP '1000';

檢索column_name字段中含有字符1000的數據。好比:jef1000sad;regexp

若是使用LIKE,那麼它將不會匹配jef1000sad中的1000,由於LIKE是全詞匹配。blog

(1) .(點號)表示匹配任意一個字符
select column_name from table_name where column_name REGEXP '.000';

檢索含有'000'前面有一個字符的數據。好比:table

ssfdd1000
dsafd2000

這兩個均可以。select

(2) OR匹配
select column_name from table_name where column_name REGEXP '100|101';

把要匹配的內容用單引號括起來,此語句匹配字段中含有100或者101的值。是含有,而不是全詞匹配。搜索

(3) 匹配幾個字符之一。

使用中括號:im

select column_name from table_name where column_name REGEXP '[35] tom';

此語句匹配含有‘3 tom’或者‘5 tom’的字段值。注意不是全詞匹配,含有就行。數據

此外還能夠進行範圍匹配:db

  • [0-9],[1-3] 等等進行數字範圍匹配。
  • [a-z]來匹配任意字符。
(4)匹配特殊字符。

若是咱們要查找字段值中含有‘.’的值,假如咱們使用:

... REGEXP '.';

那麼咱們將匹配中全部字段,由於在正則表達式中點號表示匹配任意一個字符。因此咱們須要轉義

select column_name from table_name where column_name REGEXP '\\.';

特殊字符匹配:

(5) 匹配字符類

舉個例子,匹配含有空格的字段值,不只可使用:

... REGEXP ' ';

還能夠根據上表中的[:blank:]:

select name from tb2 where name regexp '[[:blank:]]';

記住外面還須要套上箇中括號才行。

(6) 匹配多個實例

舉兩個例子:

字符's'後面跟的問號表示匹配0個或1個,因此能夠匹配到含有'stick'或者'sticks'.

下一個例子:

第一個正則表達式匹配任意出現的數字,而{4}又規定了出現4次,因此這個語句檢索連續出現4個數字的字段值。

(7) 定位符

咱們上面用的正則表達式都是在字段值中的任意位置進行匹配,但假如咱們要檢索開頭的某些字符的字段值呢?

開頭:^

select name from tb2 where name regexp '^[1-5]';

檢索開頭是以1或2或3或4或5的字段值。

結尾:$

select name from tb2 where name regexp '[mo]$';

檢索以字符m或者o結尾的字段值。

^ 符號還有一個用途:
在中括號中間表示檢索不在這個集合中間的值:

select name from tb2 where name regexp '[^1-3 tom]';

此語句是檢索除了'1 tom','2 tom','3 tom'之外的字段值。能夠看作全詞否認。

相關文章
相關標籤/搜索