【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 函数用空串替换,然后计算替换后字符串的长度,用原来字符串的长度减去替换后字符串长度即是答案。

相关推荐
T1mzhou20 分钟前
ARM64 Linux 6.10内核启动流程2-rootfs 怎么挂上
linux·服务器·前端
捷瑞电子工坊29 分钟前
Ubuntu 终端指令速查手册(持续更新)
linux·ubuntu·教程·开发工具·命令行·速查手册·终端指令
雯宝34 分钟前
6. USB 转串口驱动
linux
rest102440 分钟前
对jemalloc的理解
linux
姜太小白1 小时前
【Oracle】记排查sh脚本调用SQL执行卡顿的排查总结
数据库·sql·oracle
bgy66661 小时前
MariaDB 数据库 基础详解
数据库·mariadb
自动化监测Learner1 小时前
QGIS 把geojson数据导入 PostgreSQL/PostGIS 的完整流程
数据库·postgresql
MyFreeIT1 小时前
Android Manual
android
发光的沙子1 小时前
嵌入式系统架构师----Ubuntu如何安装不在列表内的软件?
linux·运维·ubuntu
虎虎(_ _)。゜zzZ1 小时前
Qdrant向量数据库工程实战
数据库·人工智能·大模型·向量数据库·rag·qdrant