• 正则表达式:(mysql)REGEXP


    检索列prod_name包含文本1000的所以行

    SELECT prod_name FROM  products WHERE prod_name REGEXP ‘1000’

    ORDER BY prod_name

    为什么费力使用正则表达式? 在上述例子中  正则表达式并没有带来大多好处(可能还会性能降低),

    请考虑下面的例子:

    SELECT prod_name FROM  products WHERE prod_name REGEXP ‘.000’

    ORDER BY prod_name

    进行OR匹配

    SELECT prod_name FROM  products WHERE prod_name REGEXP ‘1000|2000’

    ORDER BY prod_name

    SELECT prod_name FROM  products WHERE prod_name REGEXP ‘[123] ton’

    ORDER BY prod_name

    以上正则表达式[123] ton 为 [1|2|3] ton 缩写

    匹配范围

    例如匹配 0 -9

    [0123456789]  简化    [0-9]      [1-3]  [6-9]   [a-z]匹配任意字母

    匹配特殊字符

    SELECT prod_name FROM  products WHERE prod_name REGEXP ‘\.’

    ORDER BY prod_name

    为了匹配特殊字符,必须用  \  为前导。\-查找- ,\.表示查找.

    空白元字符

    \f  换页  \n 换行   \r  回车  \t 制表  \v 纵向制表

    \   匹配反斜杠

    匹配字符类

    [:alnum:]  任意字母和数字   同[a-zA-Z0-9]

    [:alpha:]  任意字符(同[a-zAZ])

    [:blank:]  空格和制表同[\t]

    [:cntrl:]  ASC||控制字符(ASC||  0到31和127)

    [:digit:]  任意数字同([0-9])

    [:lower:]  任意小写字母[a-z]

    [:print:]   任意可打印字符

    [:punct:]  既不在[:alnum:]   又不在[:cntrl:] 中的任意字符 

    [:space:]  包括空格在内的任意空白字符

    [:upper:]    任意大写字母

    [:xdigit:]           任意十六进制数字同[a-fA-F0-9]

    匹配多个实例

    *       0或多个匹配

    +     1个或多个匹配(等于{1,})

    ?       0个或一个匹配(等于{0,1})

    {n}    指定数目匹配

    {n,}  不少于指定数目匹配

    {n,m}        匹配数目范围(m不超过255)

    下面举几个例子:

    输入:

    SELECT prod_name FROM products WHERE pro_name GEGXP ‘\(0-9) sticks?\)’

    输出  prod_name

               TNT (1 stick)

               TNT (5 stick)

    正则式  \(0-9) sticks?\) 需要说明一下。\(  匹配(

    [0-9] 匹配任意数字  

    sticks?  匹配sticks  和stick  (s后的? 使s可选  匹配它前面的任意字符的0次或1次出现)

    \)  匹配)     注意没有? 匹配sticks和stick会非常困难

    以下是另一个例子  这次我们打算匹配连在一起的四位数字

    SELECT prod_name FROM products WHERE pro_name GEGXP ‘[[:digit:]]{4}’

    {4}            要求它前面的字符(任意数字)出现4次  所以匹配连在一起的任意4位数字

    上面的正则式也可以这么写: [0-9] [0-9] [0-9] [0-9]

    以上总结都是匹配一个字符串任意位置的文本。为了匹配特定位置的文本,需要使用定位符

    ^    文本开始

    $       文本结束

    [[:<:]]       词的开始

    [[:>:]]       词的结尾

    例如你想找出一个数(包括小数点开始的数)开始的所有产品,怎么办?

    简单搜索   [0-9]\.  或[:digit:]\.  不行  因为它将在文本任意位置查找匹配项进行匹配。

    解决的办法是使用定位符^

    SELECT prod_name FROM products WHERE pro_name GEGXP ‘^[0-9\.]’

    拼接字段

    可以使用  Concat()函 数来是使用

    示例:

    SELECT Concat(vend_name,’(’,vend_country,’)’) FROM vendors ORDER BY vend_name;

    Concat()拼接串,即把多个串连接起来形成一个较长的串

    搭配删除数据多余空客

    SELECT Concat(vend_name,’(’,RTrim(vend_country),’)’) FROM vendors ORDER BY vend_name;

    Rtrim()函数去掉值右面所有的空格

    执行算术运算

    Mysql操作运算符

    +       加

    -       减

    *       乘

    /       除

    输入

    SELECT prod_id,quantity,item_price,quantity*item_price AS expanded_price

    FROM orderitems WHERE order_num = 2005

    使用数据处理函数

    大多数函数实现支持以下类型函数

    处理文本串(例如删除或者填充,转换为大写或小写);

    数值数据上进行算术操作(如返回绝对值,进行代数运算);

    用于处理日期值,并从这些值中取特定成分(例如返回两个日期差,检测日期有效性)的日期和时间函数;

    返回DBMS正在使用的特殊信息(如返回用登录信息,检查版本细节)的系统函数

    例如 Rtrim()   去除右面列值右面的空格

    Upper() 函数

    输入

    SELECT vend_name,Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name

    Upper() 将文本转换为大写。

    常用的文本处理函数

    Left()   返回左边的字符

    Length()   返回串的长度

    Locate()   找出串的一个子串

    Lower()    将串转换为小写

    Ltrim()      去掉串左边的空格

    Right()      返回右面的字符串

    Rtrim()     去除串右面的空格

    Soundex()        返回串的SOUNDEX值

    SubString()       返回字串的字符

    Upper()    将串转换为大写

    特此解释一下SOUNDEX 是将一个任何文本串转换为描述其语音表示的字母数字模式算法。

    SELECT cust_name,cust_contact FROM customers WHERE cust_contact = ‘Y.Lie’;

    下面介绍使用Soundex()函数进行搜索,它匹配所有发音类似于Y.Lie的联系名

    SELECT cust_name,cust_contact FROM customers WHERE Soudex(cust_contact) = Soudex(‘Y.Lie’);

    日期函数

    常用日期和时间处理函数

    数值处理函数

    聚集函数

  • 相关阅读:
    城市的划入划出效果
    文本溢出省略解决笔记css
    长串英文数字强制折行解决办法css
    Poj 2352 Star
    树状数组(Binary Indexed Trees,二分索引树)
    二叉树的层次遍历
    Uva 107 The Cat in the Hat
    Uva 10336 Rank the Languages
    Uva 536 Tree Recovery
    Uva10701 Pre, in and post
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/11387784.html
Copyright © 2020-2023  润新知