正则表达式:用来匹配文本的特殊的串(字符集合)。

正则表达式用正则表达式语言来建立,它是用来完成匹配特殊的串的一种特殊语言。正则表达式有特殊的语法和指令,MySQL正则表达式只是正则表达式的一个很小的子集。

REGEXP关键字:告诉MySQL后面所跟的内容作为正则表达式处理。

LIKE与REGEXP的区别:LIKE在没有通配符的情况下,匹配的是整个列的内容是否相同;而REGEXP则是匹配的文本是否在列值中出现。

MySQL中的正则表达式匹配不区分大小写,如需区分,可使用BINARY关键字。

^的双重用途:^有两种用法,在集合中(用[和]定义),用它来否定集合。否则,用来指串的开始处。通过^开始每个表达式,用$结束每个表达式,可以使REGEXP起到和LIKE相同的作用。

本章语句:



# 基本字符匹配
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;
# 区分大小写
SELECT prod_name FROM products WHERE prod_name REGEXP BINARY 'Jet' 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;

# 错误的匹配,这等于匹配 1 或者 2 或者 3 Ton
SELECT prod_name FROM products WHERE prod_name REGEXP '1|2|3 Ton' ORDER BY prod_name;
# 否定字符集合
SELECT prod_name FROM products WHERE prod_name REGEXP '[^123] Ton' ORDER BY prod_name;
# 匹配范围
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;

# 匹配字符类(预定义的字符集)
# 任意字母或者数字
SELECT vend_name FROM vendors WHERE vend_name REGEXP '[[:alnum:]]' ORDER BY vend_name;
#任意字符
SELECT vend_name FROM vendors WHERE vend_name REGEXP '[[:alpha:]]' ORDER BY vend_name;
#任意数字
SELECT vend_name FROM vendors WHERE vend_name REGEXP '[[:digit:]]' ORDER BY vend_name;

# 使用重复元字符匹配多个实例
SELECT prod_name FROM products WHERE prod_name REGEXP '([0-9] sticks?)' ORDER BY prod_name;
# 匹配连在一起的4位数字
SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;

# 使用定位符匹配以数字或者.开头的行
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9.]' ORDER BY prod_name;

# 简单的正则表达式测试
SELECT 'hello1' REGEXP '[0-9]';



本章图表:




mysql 日期字符串 range_MySQL


表9.1 空白元字符

mysql 日期字符串 range_MySQL_02

表9.2 字符类


mysql 日期字符串 range_正则表达式_03

表9.3 重复元字符

mysql 日期字符串 range_字段_04

表9.4 定位元字符


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

计算字段:储存在表中的数据不都是计算机应用程序所需要的,我们需要直接从数据库中检索出转换、计算或格式化过的数据,而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化。这就是计算字段发挥作用的所在了。计算字段并不实际存在于数据库表中,计算字段是在运行时在SELECT语句内创建的。

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

在MySQL中的SELECT 语句中,可以使用Concat()函数来拼接两个列。

MySQL使用RTrim()函数来删除数据右侧多余的空格,LTrim()去掉串左边的空格,Trim()则去掉串左右两侧的空格。

别名:一个字段或值的替换名,用AS关键字赋予。

本章语句:


# 使用concat()函数拼接列(不使用别名)
SELECT CONCAT(vend_name, ' (', vend_country, ')') FROM vendors ORDER BY vend_name;
# 使用别名
SELECT CONCAT(vend_name, ' (', vend_country, ')') AS vend_title FROM vendors ORDER BY vend_name;

# 使用RTRIM()函数来删除字段右边的空格
SELECT CONCAT(RTRIM(vend_name), '(', RTRIM(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;

# 执行算术计算
# 查询指定订单号的物品项并计算每项的总价
SELECT
    prod_id,
    quantity,
    item_price,
    quantity * item_price AS expanded_price
FROM
    orderitems 
WHERE
    order_num = 20005;

# 如何测试计算
SELECT 3 * 2;  #返回6
SELECT TRIM('abc');  #返回abc
SELECT NOW();  #返回当前日期和时间


本章图表:


mysql 日期字符串 range_mysql 日期字符串 range_05

图10.1 MySQL算术操作符