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)

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

相关推荐
秋难降12 分钟前
零基础学习SQL(三)——数据查询语言(DQL)
数据库·sql·mysql
ptc学习者1 小时前
Oracle lgwr触发条件
数据库
シ風箏1 小时前
Hive【应用 04】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
数据库·hive·hadoop
moxiaoran57533 小时前
使用MongoDB存储和计算距离
数据库·mongodb
t_hj3 小时前
MongoDB
数据库·mongodb
bthdnj3 小时前
mysql的InnoDB索引总结
数据库·mysql
NocoBase5 小时前
6 个替代飞书多维表格的开源无代码数据库工具
数据库·开源·数据可视化
G_H_S_3_5 小时前
【网络运维】Linux:MariaDB 数据库介绍及管理
linux·运维·网络·数据库
LLLLYYYRRRRRTT5 小时前
MariaDB 数据库管理与web服务器
前端·数据库·mariadb
ClouGence6 小时前
构建秒级响应的实时数据架构
数据库·kafka