MySQL内置函数

📟作者主页:慢热的陕西人

🌴专栏链接:MySQL

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言
本博客主要内容涉及了MySQL中的内置函数

文章目录

MySQL内置函数

1.日期和时间相关的函数

函数 描述
now() 返回当前日期和时间
curdate() 返回当前日期
curtime() 返回当前时间
date(datetime) 提取日期时间表达式的日期部分
time(datetime) 提取日期时间表达式的时间部分
year(date) 提取日期的年份
month(date) 提取日期的月份
day(date) 提取日期的天数
hour(time) 提取时间的小时
minute(time) 提取时间的分钟
second(time) 提取时间的秒数
dayname(date) 返回日期的星期几名称(全名)
monthname(date) 返回日期的月份名称(全名)
dayofweek(date) 返回日期的星期几,其中1表示星期日,2表示星期一,以此类推
dayofmonth(date) 返回日期的月份中的天数
dayofyear(date) 返回日期的年份中的天数
week(date) 返回年份和周数的数字
weekday(date) 返回日期的星期几,其中0表示星期一,1表示星期二,以此类推
yearweek(date) 返回日期的年份和周数,格式为YYYYWW(年份+周数)
last_day(date) 返回给定日期所在月份的最后一天
adddate(date,整数) 将一个日期或日期时间表达式加上一段时间间隔
date_add(date,整数) 将一个日期或日期时间表达式加上一段时间间隔
date_sub(date,整数) 将一个日期或日期时间表达式减去一段时间间隔
date_format(date,格式字符串) 将日期或日期时间表达式格式化为指定的格式
  • 获得年月日:

    mysql 复制代码
    select current_date();
    +----------------+
    | current_date() |
    +----------------+
    | 2017-11-19 |
    +----------------+
  • 获得时分秒:

    mysql 复制代码
    select current_time();
    +----------------+
    | current_time() |
    +----------------+
    | 13:51:21 |
    +----------------+
  • 获得时间戳:

    mysql 复制代码
    select current_timestamp();
    +---------------------+
    | current_timestamp() |
    +---------------------+
    | 2017-11-19 13:51:48 |
    +---------------------+
  • 在日期的基础上加日期:

    mysql 复制代码
    select date_add('2017-10-28', interval 10 day);
    +-----------------------------------------+
    | date_add('2017-10-28', interval 10 day) |
    +-----------------------------------------+
    | 2017-11-07 |
    +-----------------------------------------+
  • 在日期的基础上减去时间:

    mysql 复制代码
    select date_sub('2017-10-1', interval 2 day);
    +---------------------------------------+
    | date_sub('2017-10-1', interval 2 day) |
    +---------------------------------------+
    | 2017-09-29 |
    +---------------------------------------+
  • 计算两个日期之间相差多少天:

    mysql 复制代码
    select datediff('2017-10-10', '2016-9-1');
    +------------------------------------+
    | datediff('2017-10-10', '2016-9-1') |
    +------------------------------------+
    | 404 |
    +------------------------------------+

    案例-1:

    • 创建一张表,记录生日

      mysql 复制代码
      create table tmp(
      id int primary key auto_increment,
      birthday date
      );
    • 添加当前日期:

      mysql 复制代码
      mysql> insert tmp (birthday) values(curdate());
      Query OK, 1 row affected (0.00 sec)
      
      mysql> select * from tmp;
      +----+------------+
      | id | birthday   |
      +----+------------+
      |  1 | 2024-04-08 |
      +----+------------+

      案例-2:

      • 创建一个留言表

        mysql 复制代码
        mysql> create table msg (
        id int primary key auto_increment,
        content varchar(30) not null,
        sendtime datetime
        );
      • 插入数据

        mysql 复制代码
        mysql> insert into msg(content,sendtime) values('hello1', now());
        Query OK, 1 row affected (0.00 sec)
        
        mysql> insert into msg(content,sendtime) values('hello2', now());
        Query OK, 1 row affected (0.00 sec)
        
        mysql> select * from msg;
        +----+---------+---------------------+
        | id | content | sendtime            |
        +----+---------+---------------------+
        |  1 | hello1  | 2024-04-08 19:21:17 |
        |  2 | hello2  | 2024-04-08 19:21:22 |
        +----+---------+---------------------+
        2 rows in set (0.00 sec)
      • 显示所有留言信息,发布日期只显示日期,不用显示时间

        mysql 复制代码
        mysql> select content, date(sendtime) from msg;
        +---------+----------------+
        | content | date(sendtime) |
        +---------+----------------+
        | hello1  | 2024-04-08     |
        | hello2  | 2024-04-08     |
        +---------+----------------+
        2 rows in set (0.00 sec)
      • 请查询在2分钟内发布的帖子

        mysql 复制代码
        mysql> insert into msg(content,sendtime) values('hello3', now());
        Query OK, 1 row affected (0.00 sec)
        
        mysql> select content, date(sendtime) from msg where sendtime + 2 > now();
        +---------+----------------+
        | content | date(sendtime) |
        +---------+----------------+
        | hello3  | 2024-04-08     |
        +---------+----------------+
        1 row in set (0.00 sec)

2.字符串函数

函数 描述
concat(str1, str2,...) 连接两个或多个字符串
concat_ws(separator, str1, str2,...) 使用指定的分隔符连接两个或多个字符串
length(str) 返回字符串的长度
char_length(str) 返回字符串的字符数(多字节字符算一个字符)
upper(str) 将字符串转换为大写
lower(str) 将字符串转换为小写
trim(str) 去除字符串两端的空格
ltrim(str) 去除字符串左端的空格
rtrim(str) 去除字符串右端的空格
substring(str, start, length) 返回字符串的子串,从指定位置开始,指定长度的字符
replace(str, from_str, to_str) 替换字符串中的子串为另一个字符串
reverse(str) 反转字符串
locate(substr, str, start) 返回子串在字符串中第一次出现的位置
instr(str, substr) 返回子串在字符串中第一次出现的位置,没有则返回0
left(str, length) 返回字符串左边指定长度的子串
right(str, length) 返回字符串右边指定长度的子串
insert(str, pos, length, new_str) 在字符串中插入新的字符串
mid(str, start, length) 返回字符串中从指定位置开始的一段子串
substring_index(str, delim, count) 返回字符串中指定分隔符出现次数之前或之后的子串
format(number, decimal_places) 将数字格式化为带有千位分隔符和指定小数位数的字符串
charset(str) 返回字符串的字符集名称
  • 获取emp表的ename列的字符集

    mysql 复制代码
    select charset(ename) from EMP;
  • 要求显示exam_result表中的信息,显示格式:"XXX的语文是XXX分,数学XXX分,英语XXX分"

    mysql 复制代码
    select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from student;
  • 求学生表中学生姓名占用的字节数

    mysql 复制代码
    select length(name), name from student;

    注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;

    如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数

    (与字符集编码有关)

  • 将EMP表中所有名字中有S的替换成'上海'

    mysql 复制代码
    select replace(ename, 'S', '上海') ,ename from EMP;
  • 截取EMP表中ename字段的第二个到第三个字符

    mysql 复制代码
    select substring(ename, 2, 2), ename from EMP;
  • 以首字母小写的方式显示所有员工的姓名

    mysql 复制代码
    select concat(lcase(substring(ename, 1, 1)),substring(ename,2)) from EMP;

3.数学函数

函数 描述
abs(x) 返回一个数的绝对值
sign(x) 返回一个数的符号函数:-1(负数)、0(零)、1(正数)
sqrt(x) 返回一个数的平方根
power(x, y) 返回 x 的 y 次幂
exp(x) 返回 e 的 x 次方(e 为自然对数的底)
log(x) 返回 x 的自然对数(基数为 e)
log2(x) 返回 x 的以 2 为底的对数
log10(x) 返回 x 的以 10 为底的对数
ceil(x) 返回不小于 x 的最小整数
floor(x) 返回不大于 x 的最大整数
round(x) 返回最接近 x 的整数
truncate(x, d) 返回 x 截断到 d 位小数
mod(x, y) 返回 x 除以 y 的余数
rand() 返回 0 到 1 之间的随机数
pi() 返回圆周率 π 的值
radians(x) 将角度 x 转换为弧度
degrees(x) 将弧度 x 转换为角度
  • 绝对值

    mysql 复制代码
    select abs(-100.2);
  • 向上取整

    mysql 复制代码
    select ceiling(23.04);
  • 向下取整

    mysql 复制代码
    select floor(23.7);
  • 保留2位小数位数(小数四舍五入)

    mysql 复制代码
    select format(12.3456, 2);
  • 产生随机数

    mysql 复制代码
    select rand();

4.其他函数

  • user() 查询当前用户

    mysql 复制代码
    select user();
  • md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串

    mysql 复制代码
    select md5('admin')
    mysql 复制代码
    +----------------------------------+
    | md5('admin') |
    +----------------------------------+
    | 21232f297a57a5a743894a0e4a801fc3 |
    +----------------------------------+
  • database()显示当前正在使用的数据库

    mysql 复制代码
    select database();
  • password()函数,MySQL数据库使用该函数对用户加密

    mysql 复制代码
    select password('root');
    +-------------------------------------------+
    | password('root') |
    +-------------------------------------------+
    | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
    +-------------------------------------------+
  • ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值

mysql 复制代码
select ifnull('abc', '123');
+----------------------+
| ifnull('abc', '123') |
+----------------------+
| abc |
+----------------------+
1 row in set (0.01 sec)
select ifnull(null, '123');
+---------------------+
| ifnull(null, '123') |
+---------------------+
| 123 |
+---------------------+
1 row in set (0.00 sec)

到这本篇博客的内容就到此结束了。
如果觉得本篇博客内容对你有所帮助的话,可以点赞,收藏,顺便关注一下!
如果文章内容有错误,欢迎在评论区指正

相关推荐
Java探秘者2 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2301_786964362 小时前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
苹果醋33 小时前
大模型实战--FastChat一行代码实现部署和各个组件详解
java·运维·spring boot·mysql·nginx
阿维的博客日记3 小时前
图文并茂解释水平分表,垂直分表,水平分库,垂直分库
数据库·分库分表
wrx繁星点点4 小时前
事务的四大特性(ACID)
java·开发语言·数据库
小小娥子5 小时前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
DieSnowK5 小时前
[Redis][集群][下]详细讲解
数据库·redis·分布式·缓存·集群·高可用·新手向
计算机学姐5 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis
-XWB-5 小时前
【MySQL】数据目录迁移
数据库·mysql
老华带你飞6 小时前
公寓管理系统|SprinBoot+vue夕阳红公寓管理系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot·课程设计