• 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 |
      +----------------+
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 获得时分秒:

      select current_time();
      +----------------+
      | current_time() |
      +----------------+
      | 13:51:21 |
      +----------------+
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 获得时间戳

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

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

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

      select datediff('2017-10-10', '2016-9-1');
      +------------------------------------+
      | datediff('2017-10-10', '2016-9-1') |
      +------------------------------------+
      | 404 |
      +------------------------------------+
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      案例-1:

      • 创建一张表,记录生日

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

        mysql> insert tmp (birthday) values(curdate());
        Query OK, 1 row affected (0.00 sec)
        
        mysql> select * from tmp;
        +----+------------+
        | id | birthday   |
        +----+------------+
        |  1 | 2024-04-08 |
        +----+------------+
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9

        案例-2:

        • 创建一个留言表

          mysql> create table msg (
          id int primary key auto_increment,
          content varchar(30) not null,
          sendtime datetime
          );
          
          • 1
          • 2
          • 3
          • 4
          • 5
        • 插入数据

          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)
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
        • 显示所有留言信息,发布日期只显示日期,不用显示时间

          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)
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
        • 请查询在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)
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10

    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;
      
      • 1
    • 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”

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

      select length(name), name from student;
      
      • 1

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

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

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

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

      select concat(lcase(substring(ename, 1, 1)),substring(ename,2)) from EMP;
      
      • 1

    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);
      
      • 1
    • 向上取整

      select ceiling(23.04);
      
      • 1
    • 向下取整

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

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

      select rand();
      
      • 1

    4.其他函数

    • user() 查询当前用户

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

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

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

      select password('root');
      +-------------------------------------------+
      | password('root') |
      +-------------------------------------------+
      | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
      +-------------------------------------------+
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

    在这里插入图片描述

  • 相关阅读:
    JVM Metaspace内存溢出问题
    Linux 安全 - 内核提权
    基于php的校园公寓管理系统设计与实现
    芯片漫游指南(1)-- UVM世界观
    Pyqt组合控件与QSpacerItem指南
    springboot 调用第三方接口的方式(一)使用RestTemplate方法
    nginx学习(4)Nginx 配置高可用集群(主从配置)
    8.30 - 面向对象的相关概念
    菜单栏-JS防抖
    通信总线协议四 :SPI
  • 原文地址:https://blog.csdn.net/weixin_61766635/article/details/137891123