【MySQL】内置函数

内置函数

  • 函数
    • [1. 日期函数](#1. 日期函数)
    • [2. 字符串函数](#2. 字符串函数)
    • [3. 数学函数](#3. 数学函数)
    • [4. 其它函数](#4. 其它函数)
    • [5. 练习](#5. 练习)

函数

1. 日期函数

  • 获得年月日:select current_date();
  • 获得时分秒:select current_time();
  • 获得时间戳:select current_timestamp();
  • 在日期的基础上加时间:select date_add('2023-12-16', interval 10 day);
  • 在日期的基础上减去时间:select date_sub('2023-12-16', interval 10 day);
  • 计算两个日期之间相差多少天:select datediff('2023-12-16', '2002-6-22');

实例1:

  • 创建一张表,记录生日:

    复制代码
      		create table tmp(
      		    -> id int primary key auto_increment,
      		    -> birthday date
      		    -> );
  • 添加当前日期:

    复制代码
      		insert into tmp(birthday) values(current_date());

实例2:

  • 创建一个留言表:

    复制代码
      		create table msg (
      		    -> id int primary key auto_increment,
      		    -> content varchar(30) not null,
      		    -> sendtime datetime
      		    -> );
  • 插入数据

    复制代码
      		insert into msg(content,sendtime) values('hello1', now());
      		insert into msg(content,sendtime) values('hello2', now());
  • 显示所有留言信息,发布日期只显示日期,不用显示时间
  • 请查询在2分钟内发布的帖子

画图理解:

如上图,只要 sendtime + 2 min 的时间比现在的时间大即是 2 min 内发布的贴子,所以对应的 SQL 语句为:

复制代码
			select * from msg where date_add(sendtime, interval 2 minute) > now();

2. 字符串函数

实例:

  • 获取 emp 表的 ename 列的字符集

    复制代码
      		select charset(ename) from emp;
  • 要求显示 exam_result 表中的信息,显示格式:"XXX的语文是XXX分,数学XXX分,英语XXX分"

    复制代码
      	select concat(name, '的语文是 ', chinese,' 分,数学是 ', math,' 分,英语是 ', english, ' 分') as '分数' from exam_result;
  • 求学生表中学生姓名占用的字节数

    复制代码
      		select length(name), name from exam_result;

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

  • 将 exam_result 表中所有名字中有 S 的替换成 'H'

    复制代码
      		select replace(name, 'S', 'H'), name from exam_result;
  • 截取 emp 表中 ename 字段的第二个到第三个字符

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

    复制代码
      		select concat(lcase(substring(ename, 1, 1)), substring(ename,2)) from emp;

3. 数学函数

  • 绝对值

    复制代码
      		select abs(-123);
  • 向上取整

    复制代码
      		select ceiling(23.04);
  • 向下取整

    复制代码
      		select floor(23.99);
  • 保留2位小数位数(小数四舍五入)

    复制代码
      		select format(23.4556, 2);
  • 产生随机数

    复制代码
      		select rand();

4. 其它函数

  • user() 查询当前用户

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

    复制代码
      		select md5('123456');
  • database()显示当前正在使用的数据库

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

    复制代码
      		select password('root');
  • ifnull(val1, val2) 如果 val1 为 null,返回 val2,否则返回 val1 的值

    复制代码
      		select ifnull('abc', '123');
复制代码
			select ifnull(null, '123');

5. 练习

查找字符串中逗号出现的次数

上题的思路我们首先可以将字符串中的 逗号 使用 replace 函数用空串替换,然后计算替换后字符串的长度,用原来字符串的长度减去替换后字符串长度即是答案。

相关推荐
想摆烂的不会研究的研究生1 小时前
每日八股——Redis(1)
数据库·经验分享·redis·后端·缓存
Sumlll_1 小时前
Ubuntu系统下QEMU的安装与RISC-V的测试
linux·ubuntu·risc-v
码熔burning1 小时前
MySQL 8.0 新特性爆笑盘点:从青铜到王者的骚操作都在这儿了!(万字详解,建议收藏)
数据库·mysql
xiaolizi5674891 小时前
安卓远程安卓(通过frp与adb远程)完全免费
android·远程工作
阿杰100012 小时前
ADB(Android Debug Bridge)是 Android SDK 核心调试工具,通过电脑与 Android 设备(手机、平板、嵌入式设备等)建立通信,对设备进行控制、文件传输、命令等操作。
android·adb
猫头虎2 小时前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
梨落秋霜2 小时前
Python入门篇【文件处理】
android·java·python
哈库纳玛塔塔2 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
eason_fan3 小时前
Service Worker 缓存请求:前端性能优化的进阶利器
前端·性能优化
晚风吹人醒.3 小时前
SSH远程管理及访问控制
linux·运维·ssh·scp·xshell·访问控制·远程管理