1. 程式人生 > >MySQL必知必會---通配符與正則表達式

MySQL必知必會---通配符與正則表達式

mysql

  • like操作符
  • 為在搜索子句中使用通配符,必須使用like操作符。

    註意:操作符何時不是操作符?答案是它在作為謂詞時。

    1. 百分號(%)通配符

    %表示任何字符出現任意次數。

    MariaDB [test]> select id,age,province
    -> from user
    -> where province like ‘天%‘
    -> ;
    +----+------+----------+
    | id | age | province |
    +----+------+----------+
    | 3 | 56 | 天津 |
    | 9 | 33 | 天津 |
    +----+------+----------+

    2 rows in set (0.00 sec)

    1. 下劃線(_)通配符

    下劃線_,只匹配單個字符而不是多個字符。

    使用通配符的技巧:
    1.不要過度使用通配符
    2.在確實需要使用通配符時,不要用在搜索模式的開始處。影響效率
    3.仔細註意通配符的位置

    1. 使用mysql 正則表達式

    MariaDB [test]> select id,age,province
    -> from user
    -> where age regexp ‘2‘
    -> ;
    +----+------+----------+
    | id | age | province |
    +----+------+----------+
    | 1 | 22 | 北京 |

    | 2 | 25 | 廣東 |
    | 10 | 27 | 湖南 |
    | 11 | 29 | 北京 |
    | 13 | 24 | 北京 |
    +----+------+----------+
    5 rows in set (0.00 sec)

    5.進行OR匹配

    MariaDB [test]> select id,age,province
    -> from user
    -> where age regexp ‘22|27‘;
    +----+------+----------+
    | id | age | province |
    +----+------+----------+

    | 1 | 22 | 北京 |
    | 10 | 27 | 湖南 |
    +----+------+----------+
    2 rows in set (0.03 sec)

    6.匹配幾個字符之一

    MariaDB [test]> select id,age,province
    -> from user
    -> where age regexp ‘[123]7‘;
    +----+------+----------+
    | id | age | province |
    +----+------+----------+
    | 8 | 17 | 河北 |
    | 10 | 27 | 湖南 |
    +----+------+----------+
    2 rows in set (0.00 sec)

    7.匹配範圍

    MariaDB [test]> select id,age,province
    -> from user
    -> where age regexp ‘[1-3]7‘;
    +----+------+----------+
    | id | age | province |
    +----+------+----------+
    | 8 | 17 | 河北 |
    | 10 | 27 | 湖南 |
    +----+------+----------+
    2 rows in set (0.00 sec)

    8.匹配特殊字符

    註意:特殊字符處理時需進行轉義 escaping

    \f 換頁
    \n 換行
    \r 回車
    \t 制表
    \v 縱向制表

    匹配(\)為了匹配反斜杠字符本身,需要使用\

    9.匹配字符類

    [:alnum:] 任意字母和數字
    [:alpha:] 任意字符
    [:blank:] 空格和制表
    [:cntrl:] ASCII 控制字符
    [:digit:] 任意數字
    [:graph:] 與[:print:]相同,但不包括空格
    [:lower:] 任意小寫字母
    [:print:] 任意可打印字符
    [:punct:] 既不在[:alnum:] 又不在 [:cntrl:] 中的任意字符
    [:space:] 包括空格在內的任意空白字符
    [:upper:] 任意大寫字母
    [:xdigit:] 任意十六進制數字

    10.匹配多個實例

    • 0個或多個匹配
    • 1個或多個匹配
      ? 0個或一個匹配
      {n} 指定數目的匹配
      {n,} 不少於指定數目的匹配
      {n,m} 範圍匹配

    11.定位符

    ^ 文本開始
    $ 文本末尾
    [[:<:]] 詞的開始
    [[:>:]] 詞的結尾

    MySQL必知必會---通配符與正則表達式