社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

十个实用MySQL函数

开源中国 • 6 年前 • 521 次点击  

本文首发于个人微信公众号《andyqian》,期待你的关注!

前言

  继上一次《十个实用MySQL命令》后,今天奉上十个实用MySQL函数。下面都是一些比较常用且简单的函数,在工作中也是非常常用的。

函数  

0. 显示当前时间
命令select now()
作用: 显示当前时间。
应用场景: 创建时间,修改时间等默认值。
例子

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2017-12-27 20:14:56 |
+---------------------+
1 row in set (0.00 sec)

1. 字符长度
命令select char_length('andyqan')
作用: 显示指定字符长度。
应用场景: 查看字符长度时。
例子

mysql> select char_length('andyqian');
+-------------------------+
| char_length('andyqian') |
+-------------------------+
|                       8 |
+-------------------------+
1 row in set (0.00 sec)

2. 日期格式化
命令select date_format(now(),'%y-%m-%d)
作用:格式化日期。
应用场景:格式化日期时。
例子

mysql> select date_format(now(),'%y-%m-%d');
+-------------------------------+
| date_format(now(),'%y-%m-%d') |
+-------------------------------+
| 17-12-28                      |
+-------------------------------+
1 row in set (0.00 sec)

这里支持的格式有:
%y:表示年(两位数),例如: 17 年。
%Y:表示4位数中的年,例如: 2017年
%m:表示月(1-12)
%d: 表示月中的天
%H: 小时(0-23)
%i: 分钟 (0-59)
%s: 秒 (0-59)

年月日时分秒: %y-%m-%d %H:%i:%s,
如下所示:

mysql> select DATE_FORMAT(now(),'%y-%m-%d %H:%i:%s');
+----------------------------------------+
| DATE_FORMAT(now(),'%y-%m-%d %H:%i:%s') |
+----------------------------------------+
| 17-12-27 20:28:54                      |
+----------------------------------------+
1 row in set (0.00 sec)

3. 添加/减少日期时间
命令
DATE_ADD(date,interval expr unit)
DATE_SUB(date,interval expr unit)
作用: 增加/减少日期时间
应用场景:当前时间的前一天,前几分钟。 常用于数据统计。
例子

mysql> select date_add(now(),interval 1 day);
+--------------------------------+
| date_add(now(),interval 1 day) |
+--------------------------------+
| 2017-12-28 20:10:17            |
+--------------------------------+
1 row in set (0.00 sec)

其中Date表示日期格式,其中就包括: 如
2017-12-27,now() 等格式。
expr:表示数量。
unit:表示单位,支持毫秒(microsecond),秒(second),小时(hour),天(day),周(week),年(year)等。

4. 类型转换
命令: CAST(expr AS type)
作用: 主要用于显示类型转换
应用场景:显示类型转换
例子

mysql> select cast(18700000000 as char);
+---------------------------+
| cast(18700000000 as char) |
+---------------------------+
| 18700000000               |
+---------------------------+
1 row in set (0.00 sec)

需要注意的是,其中type支持的不是全部基本数据类型,支持的详细类型,请参考之前的文章《谈谈MySQL显示类型转换》。

5. 加密函数
命令: md5(data)
作用: 用于加密数据
应用场景:加密,一些隐私数据,例如银行卡号,身份证等需要存储密文,(当然,不建议使用数据库层加密,应该在应用层加密)
例子

mysql> select md5("andyqian");
+----------------------------------+
| md5("andyqian")                  |
+----------------------------------+
| 8a6f60827608e7f1ae29d1abcecffc3a |
+----------------------------------+
1 row in set (0.00 sec)

注意事项: 如果目前你们数据库中的数据还是明文,此时可以使用数据库加密算法进行加密。

例如: (仅做演示):

update t_base_user set name=md5(name),updated_time=now() where id=1;

支持的加密函数有:

  1. md5()

  2. des_encrypt(加密) / des_decrypt(解密);

  3. sha1()

  4. password() 等等

这里不再一一介绍,有兴趣的同学,可以移步至官网进行详细了解。

6. 字符串连接
命令: concat(str,str2,str3)
作用:拼接字符串
应用场景:拼接字符串,例如在某些字段上同一加上指定字符串。
例子

mysql> select concat("andy","qian");
+-----------------------+
| concat("andy","qian") |
+-----------------------+
| andyqian              |
+-----------------------+
1 row in set (0.00 sec)

该函数平时也还是用的比较多的,基本上场景是,在某些数据上,加上特定的字符串。方法如下:

7. JSON函数(5.7版本才支持)

命令json_object(函数)
作用:转换json字符串
应用场景:指定数据转换json字符串
例子

mysql> select json_object("name","andyqian","database","MySQL");
+---------------------------------------------------+
| json_object("name","andyqian","database","MySQL") |
+---------------------------------------------------+
| {"name": "andyqian", "database": "MySQL"}         |
+---------------------------------------------------+
1 row in set (0.00 sec)

其中包括json_array:

mysql> select json_array("name","andyqian","database","MySQL");
+--------------------------------------------------+
| json_array("name","andyqian","database","MySQL") |
+--------------------------------------------------+
| ["name", "andyqian", "database", "MySQL"]        |
+--------------------------------------------------+
1 row in set (0.00 sec)

判断是否为json字符串的json_valid():

select json_valid('{"name": "andyqian", "database": "MySQL"}');

其中为有效json字符串时为1。
无效json字符串时为0.
还有很多方法,不再一一演示。

8. 聚合函数
命令: sum(),count(),avg(),max(),min()
作用:统计,求平均值,最大,最小值
应用场景:这类函数非常常见,主要用于数据统计,在SQL优化方面,也适用。
例子

mysql> select max(id) from t_base_user;
+---------+
| max(id) |
+---------+
|       2 |
+---------+
1 row in set (0.00 sec)

这里有个小技巧,如果主键是有序递增的,当需要有多少用户时,可以使用max(id)来代替count(*)函数。

9. distinct()
命令: distinct
作用:去重
应用场景:需要统计类型,状态,计算区分度时。
例子

mysql> select count(distinct(name))/count(*) from t_base_user;
+--------------------------------+
| count(distinct(name))/count(*) |
+--------------------------------+
|                         0.6667 |
+--------------------------------+
1 row in set (0.00 sec)

上述为计算区分度的例子,如有不明白的,可以参考之前的文章《写会MySQL索引

最后: 祝大家晚安!

相关阅读:

浅谈MySQL表结构设计

谈谈MySQL显示类型转换

说说 MySQL JSON 数据类型

浅谈MySQL Online DDL(下)

 

这里写图片描述

扫码关注,一起进步

个人博客: www.andyqian.com

 

 


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/aWxR338YUK
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/5032
 
521 次点击