• MySQL 3 通配符、正则、计算字段


    1. 使用通配符进行过滤

    通配符:用来匹配值的一部分的特殊字符。

    搜索模式:由字面值、通配符或两者组合构成的搜索条件。

    通配符本身实际是SQL的WHERE子句中有特殊含义的字符。

    SQL支持几种通配符,为了在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

    百分号%通配符:

    %表示任何字符出现任意次数。

      SELECT prod_id, prod_name

      FROM products

      WHERE prod_name LIKE 'jet%';  //此例使用搜索模式'jet%'。将检索任意以jet起头的词。%告诉MySQL接受jet之后的任意字符。

    MySQL的搜索可以是区分大小写的。

    匹配模式中的空格是有意义的。

    下划线(_)操作符:

    下划线的用途是匹配单个字符而不是多个字符。

      SELECT prod_id, prod_name

      FROM products

      WHERE prod_name LIKE '_ ton anvil';  //这里的_只且必须匹配一个字符,满足条件才被显示

    2.  正则表达式

    WHERE子句中使用正则表达式。匹配文本。REGEXP

    基本字符匹配:

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '1000'

      ORDER BY  prod_name;  //检索prod_name包含文本1000的所有行

    相比于通配符匹配,正则匹配在WHERE子句中的命令用的是REGEX关键字。

    正则表达式中的   .  :

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '.000'

      ORDER BY prod_name;

    .  是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符,因此可以匹配1000、2000这样的。

    进行OR匹配:使用 |

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '1000|2000'

      ORDER BY prod_name;  //检索prod_name包含1000或2000的行记录

    正则表达式中的“或”使用 |。多个或是:'1000|2000|3000'

    匹配几个字符之一:是用中括号

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '[123] Ton'

      ORDER BY prod_name;

    [123]定义了一组字符,它的意思是匹配1或2或3。[]相当于另一种或命令。等同于 ’[1|2|3] Ton'。加[]防止误认为1|2|3 Ton,这时3 Ton是一个整体。

    匹配范围:

    也是使用中括号,如[123456789]可以简写为[1-9]。9个数字的或。

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '[1-5] Ton'

      ORDER BY prod_name;

    匹配特殊字符:

    因为正则表达式中有些字符有特殊的功能,如( . 、|、[]、-)。为了匹配这些字符的原来形式,使用\为前导,\-表示查找-,\.表示查找 . 。

      SELECT vend_name

      FROM vendors

      WHERE vend_name REGEXP '\.'

      ORDER BY vend_name;

    \相当于转义。为了匹配反斜杠()本身,需要使用\。

    匹配字符类:

    [:alnum:]  任意字母和数字

    [:alpha:]  任意字符

    [:blank:]  空格和制表

    [:cntrl:]  ASCII控制字符

    [:digit:]  任意数字

    [:graph:]  与[:print:]相同,但不包含空格

    [:lower:]  任意小写字母

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

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

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

    [:upper:]  任意大写字母

    [:xdigit:]  任意十六进制数字

    匹配多个实例:以下是正则表达式中的元字符

    元字符  说明

    *  0或多个匹配

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

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

    {n}  指定数目的匹配

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

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

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '\([0-9] sticks?\)'

      ORDER BY prod_name;

    这里的\匹配括号,然后?匹配其前面的字符s

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '[[:digit:]]{4}'

      ORDER BY prod_name;

    此处[:digit:]作为一个子集合。某个数字连续4次出现。

    定位符:

    前面讨论的匹配是字符串中任意位置的匹配,如果需要指明位置,则要使用定位符。

    元字符  说明

    ^  文本的开始

    $  文本的结尾

    [[:<:]]  词的开始

    [[:>:]]  词的结尾

      SELECT prod_name

      FROM products

      WHERE prod_name REGEXP '^[0-9\.]'

      ORDER BY prod_name;

    匹配以任意数字或.为开头字符的字符串。

    3. 计算字段

    存储在数据库表中的数据一般不是应用程序所需要的格式。我们有时需要直接从数据库中检索出转换、计算或格式化过的数据;而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化。

    计算字段是运行时在SELECT语句内创建的。

    字段:基本上与列的意思相同,经常是互换使用,不过数据库列一般称为列,而术语字段通常用在计算字段的连接上。

    拼接字段:

    如vendors表包含供应商和位置信息。假如要生成一个供应商报表,需要在供应商的名字中按照name(location)这样的格式列出供应商的位置。

    拼接:将值联结到一起构成单个值。

    方法是把两个列拼接起来。在MySQL的SELECT语句中,可使用Concat()函数来拼接两个列。

      SELECT Concat( vend_name, ' (', vend_country, ') ')

      FROM vendors

      ORDER BY vend_name;

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

    Concat()需要一个或多个指定的串,各个串之间用逗号分隔。

    MySQL的RTrim()函数来删除数据右侧多余的空格来整理数据。

      SELECT Concat( RTrim(vend_name), ' (', RTrim(vend_country), ') ')

      FROM vendors

      ORDER BY vend_name;

    RTrim()函数去掉值右边的所有空格。

    LTrim()函数去掉左边空格,Trim()函数去掉串左右两边的空格。

    使用别名:

    别名是一个字段或值的替换名。别名用AS关键字。

      SELECT Concat( RTrim(vend_name), ' (', RTrim(vend_country), ') ') AS

      vend_title

      FROM vendors

      ORDER BY vend_name;

    上面个将拼接值用一个别名替换。显示的列名称为这个别名。

    执行算术计算:

    MySQL中的SQL中支持一些算术操作符。

    操作符  说明

    +  加

    -  减

    *  乘

    /  除

      SELECT prod_id,

          quantity,

          item_price,

          quantity*item_price AS expanded_price

      FROM orderitems

      WHERE order_num = 20005;

    将两项相乘并赋一个别名。

    Now()函数返回当前日期和时间。

  • 相关阅读:
    线性代数学习笔记(代数版)
    洛谷P2765 魔术球问题(贪心 最大流)
    洛谷P2770 航空路线问题(费用流)
    洛谷P4013 数字梯形问题(费用流)
    洛谷P2774 方格取数问题(最小割)
    洛谷P2761 软件补丁问题(状压DP,SPFA)
    项目mysql数据导入数据的Java程序
    axd与ashx区别
    LD1-K(求差值最小的生成树)
    rabbitMQ入门
  • 原文地址:https://www.cnblogs.com/cjj-ggboy/p/12532788.html
Copyright © 2020-2023  润新知