Mysql技术内幕—计算字段(函数)
Posted 喜欢敲代码的胖虎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql技术内幕—计算字段(函数)相关的知识,希望对你有一定的参考价值。
上一小节讲了mysql数据过滤的两种方法。第一种是关键字like加通配符“%”或“”,“%”可以匹配任意字符,“_”匹配单个字符。第二种是正则表达式匹配,并且举例了几种特殊场景。
本小节讲下什么是Mysql计算字段。
计算字段可以理解为某种函数,遇到如下场景可以使用计算字段:
-
在一个字段既显示姓名又显示地址,姓名和地址存储在表中不同的列。 -
列数据大小写混合,但是需要全部大写或者小写显示。 -
表数据的一般运算(加、减、乘、除) 。 -
日期处理。
1.拼接字段
select * from order_info;
id | name | prod_name | order_price | address | order_time |
---|---|---|---|---|---|
1 | 高虎 | 西瓜 | 23 | 北京市西城区 | 2021-02-21 18:39:59 |
2 | 胖虎 | 香蕉 | 13 | 北京市朝阳区 | 2021-02-20 12:32:53 |
3 | 瘦虎 | 苹果 | 24 | 北京市海淀区 | 2021-01-20 13:31:59 |
4 | 矮虎 | 梨子 | 22 | 北京市通州区 | 2021-01-12 14:31:52 |
select CONCAT(name,',',address) as name_address from order_info;
name_address |
---|
高虎,北京市西城区 |
胖虎,北京市朝阳区 |
瘦虎,北京市海淀区 |
矮虎,北京市通州区 |
2.执行算数计算
在select语句中可以使用+ 、-、*、/ 一般运算符。
select order_price*order_price as double_price from order_info ;
double_price |
---|
529 |
169 |
576 |
484 |
3.字符函数
文本处理函数RTrim()会去除掉列值右边的空格,而Upper()函数会把列中小写转换为大写。
同样的函数还有:
函 数 | 说明 |
---|---|
RTrim() | 去掉右边空格 |
SubString() | 返回子串字符 |
Upper() | 小写转为大写 |
4.日期处理函数
(1)使用AddDate()函数添加或者删除指定时间。在原有order_time时间基础上增加32天:
SELECT ADDDATE(order_time,INTERVAL 32 DAY) as new_time from `order_info`;
new_time |
---|
2021-03-25 18:39:59 |
2021-03-24 12:32:53 |
2021-02-21 13:31:59 |
2021-02-13 14:31:52 |
在order_time时间基础上增加2分2秒:
SELECT ADDDATE(order_time,INTERVAL ‘2:2’ MI_SE) as new_time from `order_info`;
new_time |
---|
2021-02-22 18:39:59 |
2021-02-21 12:32:53 |
2021-01-21 13:31:59 |
2021-01-13 14:31:52 |
(2)使用DateDiff计算两个日期之间的间隔天数。
SELECT DATEDIFF('2021-2-21','2021-2-23') as col
col |
---|
-2 |
(3)使用Year()、Month()和Day()函数获取日期对应的年、月和日。
SELECT YEAR(order_time),MONTH(order_time), Day(order_time) from `order_info`;
year | month | day |
---|---|---|
2021 | 2 | 21 |
(4)如果我们仅仅是想年月日与表里的日期匹配,怎么办?下列语句是不可行的。
SELECT * from `order_info` where order_time='2021-02-21';
检索为空。
如果我们只想查询02月21日当天的订单可以使用Date函数,Date函数可以提取年月日。
SELECT * from `order_info` where Date(order_time)='2021-02-21';
id | name | prod_name | order_price | address | order_time |
---|---|---|---|---|---|
1 | 高虎 | 西瓜 | 23 | 北京市西城区 | 2021-02-21 18:39:59 |
(5)如果我们只想检索出2021年2月的所有订单应该怎么办?
两种查询方法:
SELECT * from `order_info` where YEAR(order_time)='2021' and MONTH(order_time)='2';
SELECT * from `order` where Date(time) BETWEEN '2021-02-01' and '2021-02-29'
id | name | prod_name | order_price | address | order_time |
---|---|---|---|---|---|
1 | 高虎 | 西瓜 | 23 | 北京市西城区 | 2021-02-21 18:39:59 |
2 | 胖虎 | 香蕉 | 13 | 北京市朝阳区 | 2021-02-20 12:32:53 |
还有经常使用的函数有如下:
函数 | 说明 |
---|---|
AddDate() | 增加一个日期 |
CurDate() | 返回当前日期(yyy-mm-dd) |
CurTime() | 返回当前时间(hh:ss:mm) |
Date() | 返回当前时间 |
DateDiff() | 计算两个日期差 |
Date_Add() | 时间运算 |
Date_Format() | 返回格式化的时间字符串 |
Day() | 返回日 |
DayOfWeek() | 返回星期 |
Hour() | 返回小时 |
Minute() | 返回分钟 |
Month() | 返回月 |
Now() | 返回当前日期和时间 |
Second() | 返回秒 |
Time() | 返回时间部分 |
Year() | 返回年 |
5.数值处理函数
函数 | 说明 |
---|---|
Abs() | 返回一个数的绝对值 |
Cos() | 返回角度的余弦值 |
Exp() | 返回一个数的指数值 |
Mod() | 返回余数 |
Pi() | 返回圆周率 |
Rand() | 返回随机数 |
6.聚集函数
有以下场景:
-
确定表中的函数。 -
确定表列的最大值和最小值。
函 数 | 说明 |
---|---|
AVG() | 返回列的平均值 |
COUNT() | 返回列的行数 |
MAX() | 返回列的最大值 |
MIN() | 返回列的最小值 |
SUM() | 返回列的和 |
7.组合聚集函数
select count(*) as total ,Min(price) as min_price ,Max(price) as max_price ,Avg(price) as avg_price from order_info;
total | min_price | max_price | avg_price |
---|---|---|---|
4 | 23 | 23 | 23.00 |
返回四个商品的价格最低、最高和平均价格以及所有条数。
8.小结
本小节给出了,Mysql常用的函数并举例具体用法,下一节将更新表的全文搜索方法。
胖虎出品|必属精品
点击阅读
以上是关于Mysql技术内幕—计算字段(函数)的主要内容,如果未能解决你的问题,请参考以下文章
Spark技术内幕: Task向Executor提交的源代码解析