[MySQL][内置函数][日期函数][字符串函数][数学函数]详细讲解


1.日期函数

1.基础语法

请添加图片描述

  • 日期时间在MYSQL中是区分开的
    • 日期:年月日
    • 时间:时分秒
  • 获得年月日
    select current_date();
     +----------------+
     | current_date() |
     +----------------+
     | 2024-01-24     |
     +----------------+
    
  • 获得时分秒
    select current_time();
     +----------------+
     | current_time() |
     +----------------+
     | 13:51:21       |
     +----------------+
    
  • 获得时间戳
    select current_timestamp();
     +---------------------+
     | current_timestamp() |
     +---------------------+
     | 2024-01-24 13:51:48 |
     +---------------------+
    
  • 在日期的基础上加日期
    select date_add('2024-01-14', interval 10 day);
     +-----------------------------------------+
     | date_add('2024-01-14', interval 10 day) |
     +-----------------------------------------+
     | 2024-01-24                              |
     +-----------------------------------------+
    
  • 在日期的基础上减去时间
    select date_sub('2024-01-24', interval 2 day);
    +----------------------------------------+
    | date_sub('2024-01-24', interval 2 day) |
    +----------------------------------------+
    | 2024-01-22                             |
    +----------------------------------------+
    
  • 计算两个日期之间相差多少天
    +-------------------------------+
    | datediff(now(), '1949-10-01') |
    +-------------------------------+
    |                         27143 |
    +-------------------------------+
    

2.示例1

  • 创建一张表,记录生日,
    create table tmp(
    id int primary key auto_increment,
    birthday date
    );
    
  • 添加当前日期
    insert into tmp(birthday) values(current_date());
    mysql> select * from tmp;
    +----+------------+
    | id | birthday   |
    +----+------------+
    | 1  | 2024-01-24 |
    +----+------------+
    

3.示例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());
    mysql> insert into msg(content,sendtime) values('hello2', now());
    
    mysql> select * from msg;
    +----+---------+---------------------+
    | id | content | sendtime            |
    +----+---------+---------------------+
    | 1  | hello1  | 2024-01-24 14:12:20 |
    | 2  | hello2  | 2024-01-24 14:13:21 |
    +----+---------+---------------------+
    
  • 显示所有留言信息,发布日期只显示日期,不用显示时间
    select content,date(sendtime) from msg;
    
  • 请查询在2分钟内发布的帖子
    • 理解:以下两种写法意思相同
      • msg_time > cur_time - 2
      • msg_time + 2 > cur_time
        ![[Pasted image 20240225181330.png]]
    select * from msg where date_add(sendtime, interval 2 minute) > now();  
    select * from msg where date_sub(now(), interval 2 minute) < sendtime;
    

2.字符串函数

1.基础语法

请添加图片描述

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

2.示例

  • 获取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;
    
  • 将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.数学函数

1.基础语法

请添加图片描述

  • 关于ceilingfloor
    • C语言中的取整为**0向取证**
    • ceiling是向+∞取整
    • floor是向-∞取整

2.示例

  • 绝对值
    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的值
    • 类似C语言中的三目运算符 a?b:c --> (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)
    
  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DieSnowK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值