• 【MySQL学习笔记】(七)内置函数


    日期函数

    在这里插入图片描述

    示例

    • 获得当前年月日
    mysql> select current_date();
    +----------------+
    | current_date() |
    +----------------+
    | 2023-09-03     |
    +----------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 获得当前时分秒
    mysql> select current_time;
    +--------------+
    | current_time |
    +--------------+
    | 09:20:15     |
    +--------------+
    1 row in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 获得当前时间戳

    mysql中该函数会自动将时间戳转化为年月日时分秒的格式

    mysql> select current_timestamp();
    +---------------------+
    | current_timestamp() |
    +---------------------+
    | 2023-09-03 09:20:49 |
    +---------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • date(datetime),返回 datetime 参数中的日期部分(年月日部分)
    mysql> select date(current_date());
    +----------------------+
    | date(current_date()) |
    +----------------------+
    | 2023-09-03           |
    +----------------------+
    1 row in set (0.00 sec)
    
    //虽然currnt_time()获得的只有时分秒时间,但该函数内部获得时间的时候是可以获得日期(年月日)的
    mysql> select date(current_time());
    +----------------------+
    | date(current_time()) |
    +----------------------+
    | 2023-09-03           |
    +----------------------+
    1 row in set (0.00 sec)
    
    mysql> select date(current_timestamp());
    +---------------------------+
    | date(current_timestamp()) |
    +---------------------------+
    | 2023-09-03                |
    +---------------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 在日期的基础上加上日期
    //在 2023-9-3 的基础上加上 50 天
    mysql> select date_add('2023-9-3',interval 50 day);
    +--------------------------------------+
    | date_add('2023-9-3',interval 50 day) |
    +--------------------------------------+
    | 2023-10-23                           |
    +--------------------------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 在日期的基础上减去日期
    //在 2023-10-23 的基础上减去 50 天
    mysql> select date_sub('2023-10-23',interval 50 day);
    +----------------------------------------+
    | date_sub('2023-10-23',interval 50 day) |
    +----------------------------------------+
    | 2023-09-03                             |
    +----------------------------------------+
    1 row in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 计算两个日期相差多少天
    mysql> select datediff('2023-9-3','2023-10-23');
    +-----------------------------------+
    | datediff('2023-9-3','2023-10-23') |
    +-----------------------------------+
    |                               -50 |
    +-----------------------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    案例-1

    • 创建一张表,记录生日
    mysql> create table tmp (id int primary key auto_increment,birthday date not null);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> desc tmp;
    +----------+---------+------+-----+---------+----------------+
    | Field    | Type    | Null | Key | Default | Extra          |
    +----------+---------+------+-----+---------+----------------+
    | id       | int(11) | NO   | PRI | NULL    | auto_increment |
    | birthday | date    | NO   |     | NULL    |                |
    +----------+---------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 添加当前日期
    mysql> insert into tmp(birthday) values(current_date());
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select* from tmp;
    +----+------------+
    | id | birthday   |
    +----+------------+
    |  1 | 2023-09-03 |
    +----+------------+
    1 row in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    案例-2

    • 创建一个留言表
    mysql> create table msg(id int primary key auto_increment,content varchar(30) not null,sendtime datetime);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> desc msg;
    +----------+-------------+------+-----+---------+----------------+
    | Field    | Type        | Null | Key | Default | Extra          |
    +----------+-------------+------+-----+---------+----------------+
    | id       | int(11)     | NO   | PRI | NULL    | auto_increment |
    | content  | varchar(30) | NO   |     | NULL    |                |
    | sendtime | datetime    | YES  |     | NULL    |                |
    +----------+-------------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 插入数据
    mysql> insert into msg(content,sendtime) values('hello',now());
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into msg(content,sendtime) values('hi',now());
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select* from msg;
    +----+---------+---------------------+
    | id | content | sendtime            |
    +----+---------+---------------------+
    |  1 | hello   | 2023-09-03 09:48:45 |
    |  2 | hi      | 2023-09-03 09:48:52 |
    +----+---------+---------------------+
    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) |
    +---------+----------------+
    | hello   | 2023-09-03     |
    | hi      | 2023-09-03     |
    +---------+----------------+
    2 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 查询在 10 分钟内发布的帖子
    mysql> select* from msg where date_add(sendtime,interval 10 minute) > now();
    +----+---------+---------------------+
    | id | content | sendtime            |
    +----+---------+---------------------+
    |  1 | hello   | 2023-09-03 09:48:45 |
    |  2 | hi      | 2023-09-03 09:48:52 |
    +----+---------+---------------------+
    2 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    理解:
    
    ------------------------------|-----------|-------------|------------------
    
                               初始时间     now()       初始时间+10min  
    
    • 1
    • 2
    • 3
    • 4
    • 5

    字符串函数

    在这里插入图片描述

    示例

    • 获取表中的某一列的字符集
    mysql> select charset(content) from msg;
    +------------------+
    | charset(content) |
    +------------------+
    | utf8             |
    | utf8             |
    +------------------+
    2 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 字符串连接
    mysql> select concat('app','le');
    +--------------------+
    | concat('app','le') |
    +--------------------+
    | apple              |
    +--------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 某字符串中是否包含某子串,包含则返回出现的位置,未包含则返回 0
    mysql> select instr('apple','ple');
    +----------------------+
    | instr('apple','ple') |
    +----------------------+
    |                    3 |
    +----------------------+
    1 row in set (0.00 sec)
    
    mysql> select instr('apple','b');
    +--------------------+
    | instr('apple','b') |
    +--------------------+
    |                  0 |
    +--------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 转换成大写
    mysql> select ucase('abcA');
    +---------------+
    | ucase('abcA') |
    +---------------+
    | ABCA          |
    +---------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 转换成小写
    mysql> select lcase('abcA');
    +---------------+
    | lcase('abcA') |
    +---------------+
    | abca          |
    +---------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 从字符串的左边或者右边起取 length 个字符
    mysql> select left('abcdef',2);
    +------------------+
    | left('abcdef',2) |
    +------------------+
    | ab               |
    +------------------+
    1 row in set (0.00 sec)
    
    mysql> select right('abcdef',2);
    +-------------------+
    | right('abcdef',2) |
    +-------------------+
    | ef                |
    +-------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 获取字符串的长度
    mysql> select length('abc');
    +---------------+
    | length('abc') |
    +---------------+
    |             3 |
    +---------------+
    1 row in set (0.00 sec)
    
    mysql> select length('你好');
    +------------------+
    | length('你好')   |
    +------------------+
    |                6 |
    +------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    • 在字符串中用某子串替换掉其中的子串
    //在 ‘hello world’ 中用 ‘jack’ 替换掉 ‘world’
    mysql> select replace('hello world','world','jack');
    +---------------------------------------+
    | replace('hello world','world','jack') |
    +---------------------------------------+
    | hello jack                            |
    +---------------------------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 逐字符比较字符串的大小
    //第一个字符串小于第二个字符串返回 -1
    mysql> select strcmp('abc','abd');
    +---------------------+
    | strcmp('abc','abd') |
    +---------------------+
    |                  -1 |
    +---------------------+
    1 row in set (0.00 sec)
    
    //相等返回 0
    mysql> select strcmp('abc','abc');
    +---------------------+
    | strcmp('abc','abc') |
    +---------------------+
    |                   0 |
    +---------------------+
    1 row in set (0.00 sec)
    
    //大于返回 1
    mysql> select strcmp('abd','abc');
    +---------------------+
    | strcmp('abd','abc') |
    +---------------------+
    |                   1 |
    +---------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 从字符串的第 position 开始,取 length 个字符
    //从第一个位置开始取三个字符
    mysql> select substring('abcdefg','1',3);
    +----------------------------+
    | substring('abcdefg','1',3) |
    +----------------------------+
    | abc                        |
    +----------------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 去除 前空格 / 后空格 / 前后空格
    mysql> select '   hello   ' as res;
    +-------------+
    | res         |
    +-------------+
    |    hello    |
    +-------------+
    1 row in set (0.00 sec)
    
    mysql> select ltrim('   hello   ') as res;//去除前空格
    +----------+
    | res      |
    +----------+
    | hello    |
    +----------+
    1 row in set (0.00 sec)
    
    mysql> select rtrim('   hello   ') as res;//去除后空格
    +----------+
    | res      |
    +----------+
    |    hello |
    +----------+
    1 row in set (0.00 sec)
    
    mysql> select trim('   hello   ') as res; //去除前后空格
    +-------+
    | res   |
    +-------+
    | hello |
    +-------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    数学函数

    在这里插入图片描述

    • 绝对值
    mysql> select abs(-100.5);
    +-------------+
    | abs(-100.5) |
    +-------------+
    |       100.5 |
    +-------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 向上取整
    mysql> select ceiling(23.4);
    +---------------+
    | ceiling(23.4) |
    +---------------+
    |            24 |
    +---------------+
    1 row in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 向下取整
    mysql> select floor(24.7);
    +-------------+
    | floor(24.7) |
    +-------------+
    |          24 |
    +-------------+
    1 row in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 保留小数位数
    //保留2位小数位数(小数四舍五入)
    mysql> select format(12.3456,2);
    +-------------------+
    | format(12.3456,2) |
    +-------------------+
    | 12.35             |
    +-------------------+
    1 row in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 产生随机数
    mysql> select rand();
    +--------------------+
    | rand()             |
    +--------------------+
    | 0.2013088168588549 |
    +--------------------+
    1 row in set (0.00 sec)
    
    mysql> select rand();
    +--------------------+
    | rand()             |
    +--------------------+
    | 0.2613807602425858 |
    +--------------------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    其他函数

    • user() 查询当前用户
    • md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
    • database()显示当前正在使用的数据库
    • password()函数,MySQL数据库使用该函数对用户加密
    • ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值
  • 相关阅读:
    【iOS】push与present Controller的区别
    localStorage封装代码
    Winform中使用System.Windows.Forms.Timer多次启动停止计时器时绑定事件会重复多次执行
    mysql数据库迁移达梦
    杰理之MIDI 解码方式共有 4 种,分别是【篇】
    redis源码阅读-主从复制增量复制细节
    go module化 import 调用本地模块 tidy
    位深bitdepth是什么
    内存的映射
    怎样找外企/远程的工作
  • 原文地址:https://blog.csdn.net/iamxiaobai_/article/details/132645586