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,格式字符串) 将日期或日期时间表达式格式化为指定的格式
  • 获得年月日:

    select current_date();
    +----------------+
    | current_date() |
    +----------------+
    | 2017-11-19 |
    +----------------+
    
  • 获得时分秒:

    select current_time();
    +----------------+
    | current_time() |
    +----------------+
    | 13:51:21 |
    +----------------+
    
  • 获得时间戳:

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

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

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

    select datediff('2017-10-10', '2016-9-1');
    +------------------------------------+
    | datediff('2017-10-10', '2016-9-1') |
    +------------------------------------+
    | 404 |
    +------------------------------------+
    

    案例-1:

    • 创建一张表,记录生日

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

      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> create table msg (
        id int primary key auto_increment,
        content varchar(30) not null,
        sendtime datetime
        );
        
      • 插入数据

        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> 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> 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列的字符集

    select charset(ename) from EMP;
    
  • 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”

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

    select length(name), name from student;
    

    注意:length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;
    如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数
    (与字符集编码有关)

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

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

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

    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 转换为角度
  • 绝对值

    select abs(-100.2);
    
  • 向上取整

    select ceiling(23.04);
    
  • 向下取整

    select floor(23.7);
    
  • 保留2位小数位数(小数四舍五入)

    select format(12.3456, 2);
    
  • 产生随机数

    select rand();
    

4.其他函数

  • user() 查询当前用户

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

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

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

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

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)

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

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 13:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 13:48:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 13:48:02       82 阅读
  4. Python语言-面向对象

    2024-04-21 13:48:02       91 阅读

热门阅读

  1. 【Vue3】ref基本类型的响应式数据

    2024-04-21 13:48:02       40 阅读
  2. 什么是关键信息基础设施及其安全保护条例

    2024-04-21 13:48:02       39 阅读
  3. 浏览器原理之本地存储

    2024-04-21 13:48:02       41 阅读
  4. 续传查询SQL不规范导致漏数的问题

    2024-04-21 13:48:02       34 阅读
  5. linux的内存管理

    2024-04-21 13:48:02       28 阅读