Mysql从入门到入魔——4. 通配符、计算字段、函数

举报
Python新视野 发表于 2021/09/28 17:42:59 2021/09/28
【摘要】 本篇主要内容通配符的简单使用,字段的计算与拼接,介绍常用的文本处理函数、日期和时间处理函数,数值处理函数。如果对文中表结构不理解的可以查看系列首页。话不多说,进入正题! 1. 通配符过滤通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。在使用通配符过滤之前首先了解 MySQL 标准的 SQL 模式匹配 LIKE 或 NOT LIKE 操作符, 它用于在 WHERE ...

本篇主要内容

通配符的简单使用,字段的计算与拼接,介绍常用的文本处理函数、日期和时间处理函数,数值处理函数。如果对文中表结构不理解的可以查看系列首页。话不多说,进入正题!



1. 通配符过滤

通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索。

在使用通配符过滤之前首先了解 MySQL 标准的 SQL 模式匹配 LIKENOT LIKE 操作符, 它用于在 WHERE 子句中搜索列中的指定模式或取值。


1.1 % 通配符

% 表示任何字符出现任意次数。例如,为了找出所有产品名称以 Fish 开头的产品

mysql> SELECT prod_id, prod_name
    -> FROM Products
    -> WHERE prod_name LIKE 'Fish%';
+---------+-------------------+
| prod_id | prod_name         |
+---------+-------------------+
| BNBG01  | Fish bean bag toy |
+---------+-------------------+

1.2 _ 通配符

通配符 _ 的用途与 % 一样也是匹配任意字符,但它只匹配单个字符,而不是多个字符

mysql> SELECT prod_id, prod_name
    -> FROM Products
    -> WHERE prod_name LIKE '12 inch t_dd_ bear';
+---------+--------------------+
| prod_id | prod_name          |
+---------+--------------------+
| BR02    | 12 inch teddy bear |
+---------+--------------------+

1.3 正则表达式匹配

SQL 标准的模式匹配的不同:

  • 正规表达式匹配的是子串,只要目标字符串中有一部分符合模式(正则表达式),即匹配成功。 SQL 标准的模式匹配将匹配整个目标字符串,只有当目标字符串完全符合模式,才算匹配成功。
  • 当我们想要用正则表达式像 SQL 标准模式一样只匹配整个目标字符串时,就需要用到 ^ 字符来表示目标字符串的开头,$ 字符表示目标字符串的结尾。

现在我们使用正则表达式,再次查询所有产品名称以 Fish 开头的产品。

mysql> SELECT prod_id, prod_name
    -> FROM Products
    -> WHERE prod_name REGEXP '^Fish.*$';
+---------+-------------------+
| prod_id | prod_name         |
+---------+-------------------+
| BNBG01  | Fish bean bag toy |
+---------+-------------------+

关于正则表达式的使用,有不懂的可以在 这个网址 来学习,测验。



2. 创建计算字段

2.1 计算字段

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


2.2 拼接字段

下面将 vend_name (供应商名), vend_country (供应商国家)两列进行合并。并通过 AS 关键字进行给新列赋予别名。

mysql> SELECT Concat(vend_name, '(', vend_country, ')') AS new_column
    -> FROM Vendors;
+------------------------+
| new_column             |
+------------------------+
| Bear Emporium(USA)     |
| Bears R Us(USA)        |
| Doll House Inc.(USA)   |
| Fun and Games(England) |
| Furball Inc.(USA)      |
| Jouets et ours(France) |
+------------------------+

2.3 执行算数计算

通过 quantity (物品数量)、 item_price (物品价格)来计算 expanded_price (总价)

mysql> SELECT quantity, item_price,
    -> quantity * item_price AS expanded_price
    -> FROM OrderItems
    -> WHERE order_num = 20008;
+----------+------------+----------------+
| quantity | item_price | expanded_price |
+----------+------------+----------------+
|        5 |       4.99 |          24.95 |
|        5 |      11.99 |          59.95 |
|       10 |       3.49 |          34.90 |
|       10 |       3.49 |          34.90 |
|       10 |       3.49 |          34.90 |
+----------+------------+----------------+


3. 函数

3.1 常用文本处理函数

函数 说明
LEFT(str, length) 返回指定长度的字符串的左边部分
RIGHT(str, length) 返回指定长度的字符串右边部分
LTRIM(str) 去掉字符串左边的空格
RTRIM(str) 去掉字符串右边的空格
LOWER(str) 将字符串转换为小写
UPPER(str) 将字符串转换为大写
LENGTH(str) 返回字符串的长度

使用 UPPER() 将文本转换为大写。

mysql> SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
    -> FROM Vendors;
+-----------------+------------------+
| vend_name       | vend_name_upcase |
+-----------------+------------------+
| Bear Emporium   | BEAR EMPORIUM    |
| Bears R Us      | BEARS R US       |
| Doll House Inc. | DOLL HOUSE INC.  |
| Fun and Games   | FUN AND GAMES    |
| Furball Inc.    | FURBALL INC.     |
| Jouets et ours  | JOUETS ET OURS   |
+-----------------+------------------+

3.2 日期和时间处理函数

查询订单表 Orders 中所有日期为 2012 的订单号。

mysql> SELECT order_num
    -> FROM Orders
    -> WHERE YEAR(order_date)=2012;
+-----------+
| order_num |
+-----------+
|     20005 |
|     20006 |
|     20007 |
|     20008 |
|     20009 |
+-----------+

3.3 数值处理函数

函数 说明
ABS() 返回一个数的绝对值
COS() 返回一个角度的余弦
SIN() 返回一个角度的正弦
TAN() 返回一个角度的正切
PI() 返回圆周率
EXP() 返回一个数的指数值
SQRT() 返回一个数的平方根

ABS() 函数为例。

mysql> SELECT ABS(-1);
+---------+
| ABS(-1) |
+---------+
|       1 |
+---------+

这就是本文所有的内容了,如果感觉还不错的话。❤ 点个赞再走吧!!!❤

在这里插入图片描述
后续会继续分享《Mysql从入门到入魔》系列文章,如果感兴趣的话可以点个关注不迷路哦~。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。