当前位置: 首页 > news >正文

mysql的内置函数

文章目录

  • mysql的内置函数
    • 时间函数
      • 1. 返回值的数据类型和格式
      • 2. 功能侧重点
      • 3. 函数别名情况
      • 我现在想给一个日期加上十天,然后输出加上十天之后的日期,我该怎么做?
      • 我现在想给一个日期减去两天,然后输出减去两天之后的日期,我该怎么做?
      • 我现在想计算两个日期之间相差多少天,我该怎么做?
      • 我现在创建出了一个表用来记录生日,请问我如何向表中插入一条生日信息?
    • 留言板问题
      • 我现在想创建一个留言板,里面的每条记录属性包含id,留言的内容,还有留言的日期,我该怎么做?
      • 我现在想往这个留言板中插入一条记录,让日期自动填充当前时间,我该怎么做?
      • 我现在想给这个留言板添加一栏,用于存放发表评论的用户名,我该怎么做?
      • 我想输出两分钟以内发出的所有帖子,我该怎么做?
    • 字符串函数
      • charset是什么意思?怎么用?
      • concat是啥意思?怎么用?
      • instr的作用是什么?怎么用?
      • ucase和lcase的作用是什么?怎么用?
      • left的作用是什么?怎么用?
      • replace的作用是什么?怎么用?
      • strcmp的作用是什么?怎么用?
      • substring的作用是什么?怎么用?
      • ltrim和rtrim的作用是什么?怎么用?
      • 我现在想获取emp表的ename列的字符集,我该怎么做?
      • 我想在数据库中,以特定格式展示student表中的信息,具体格式为:“XXX的语文是XXX分,数学是XXX分,英语是XXX分” ,我该怎么做?
      • 我想求学生表中学生姓名占用的字节数 ,我该怎么做?
      • 我想将EMP表ename栏所有名字中的S替换成上海,我该怎么做?
      • 现在我想截取EMP表中ename字段的第二个到第三个字符 ,我该怎么做?
      • 我想以首字母小写的方式显示所有员工的姓名,我该怎么做?
    • 数学函数
      • 取-100.2的绝对值
      • 将23.04向上取整
      • 将23.7向下取整
      • 对12.3456保留2位小数位数(小数四舍五入)
      • 产生随机数
      • 将十进制数10转化成二进制数
      • 将十进制数15转化成16进制数
      • 将16进制数10转化成2进制数
      • 求10除以-3的余数
      • 我现在想生成一个1000以内的随机数
    • 其他函数
      • 我现在想对一个字符串信息进行摘要加密,我该怎么做?
      • ifnull(val1, val2) 这个表达式的值是多少?

mysql的内置函数

时间函数

在 MySQL 中,有三个比较常见的时间函数CURRENT_DATE()CURRENT_TIME()CURRENT_TIMESTAMP() ,这三个函数有啥区别呢?

1. 返回值的数据类型和格式

  • CURRENT_DATE()
    • 数据类型DATE 类型。
    • 格式:返回当前日期,格式为 YYYY-MM-DD,只包含年、月、日信息,不包含时间部分。例如,在 2024年7月15日执行该函数,返回值为 2024-07-15
  • CURRENT_TIME()
    • 数据类型TIME 类型。
    • 格式:返回当前时间,格式为 HH:MM:SS,只包含时、分、秒信息,不包含日期部分 。比如,在 14点35分20秒执行该函数,返回值为 14:35:20
  • CURRENT_TIMESTAMP()
    • 数据类型DATETIME 类型 。
    • 格式:返回当前日期和时间,格式为 YYYY-MM-DD HH:MM:SS,既包含年、月、日,又包含时、分、秒。例如,在 2024年7月15日 14点35分20秒执行该函数,返回值为 2024-07-15 14:35:20

2. 功能侧重点

  • CURRENT_DATE():主要用于获取当前日期,适用于仅需要日期信息的场景,比如统计当天的销售记录、计算某日期范围内的天数等 。
  • CURRENT_TIME():专注于获取当前时间,在记录操作具体时间点(只关注时间部分),或者进行时间相关的逻辑判断(如判断是否在某个时间段内)时会用到 。
  • CURRENT_TIMESTAMP():提供完整的日期和时间信息,适用于需要精确记录事件发生的日期和具体时刻的场景,比如记录用户登录时间、订单创建时间等 。

3. 函数别名情况

  • CURRENT_DATE():有别名 CURDATE(),二者功能完全相同,可根据个人习惯选用。
  • CURRENT_TIME():有别名 CURTIME(),可以互相替换使用。
  • CURRENT_TIMESTAMP():和 NOW() 功能基本一致,都返回当前的日期和时间。不过在某些特殊场景下,NOW() 返回的是语句开始执行的时间,CURRENT_TIMESTAMP() 返回的是函数执行时的时间。

虽然这三个函数都是获取当前相关的日期时间信息,但通过数据类型、格式以及功能侧重点的差异,能满足不同的业务需求。

我现在想给一个日期加上十天,然后输出加上十天之后的日期,我该怎么做?

select + date_add()函数,其中 date_add()第一个参数传入日期,第二个参数传入interval + 日期增量 + 增量单位
像这个题,你想加10天,那第二个参数就是interval 10 day ,如果你想加2年,那第二个参数就是interval 2 year
在这里插入图片描述

我现在想给一个日期减去两天,然后输出减去两天之后的日期,我该怎么做?

select + date_sub()函数,其中date_sub()函数第一个参数传入日期,第二个参数传入日期增量
在这里插入图片描述

我现在想计算两个日期之间相差多少天,我该怎么做?

select datediff('日期1', '日期2');

我现在创建出了一个表用来记录生日,请问我如何向表中插入一条生日信息?

在这里插入图片描述

insert into tmp(birthday) values(current_date());

留言板问题

我现在想创建一个留言板,里面的每条记录属性包含id,留言的内容,还有留言的日期,我该怎么做?

在这里插入图片描述
在这里插入图片描述

我现在想往这个留言板中插入一条记录,让日期自动填充当前时间,我该怎么做?

insert into msg(content, sendtime) values('这是一条评论', now());

我现在想给这个留言板添加一栏,用于存放发表评论的用户名,我该怎么做?

ALTER TABLE msg ADD COLUMN username VARCHAR(50);

我想输出两分钟以内发出的所有帖子,我该怎么做?

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

字符串函数

charset是什么意思?怎么用?

如何查询msg表中nickname这一列的数据编码方式/采用的字符集?
select charset(nickname) from msg
在这里插入图片描述

concat是啥意思?怎么用?

concat可以将几个小字符串连接成一个大字符串,使用方法如下
在这里插入图片描述

instr的作用是什么?怎么用?

instr(string, substring )用来返回substring 在string中出现的位置
在这里插入图片描述

ucase和lcase的作用是什么?怎么用?

ucase可以将小写字母转成大写字母,lcase可以将大写字母转化成小写字母
使用方法是select + ucase/lcase(‘字符串’);
在这里插入图片描述

left的作用是什么?怎么用?

语法:left(string2, length)
作用:从string2中的左边起截取length个字符
在这里插入图片描述

如果length的长度大于总长,或者lenth小于0,会出现在怎样的情况呢?
length的长度大于总长,那么会返回整个字符串,如果lenth小于0,返回值为空

replace的作用是什么?怎么用?

在str中用replace_str替换search str
在这里插入图片描述

如果原字符串中没有替换目标字符串search str ,此时我们执行replace操作,结果会怎样呢?
结果原字符串无事发生,然后输出
在这里插入图片描述

strcmp的作用是什么?怎么用?

作用是比较两个字符串是否相等,用法是select + strcmp + (‘字符串1’, ‘字符串2’);
在这里插入图片描述

请问上图中,为什么第一个结果是-1,第二个结果是1?
因为’aaa’第一个字符a的ASCII码比’bbb’第一个字符b的ASCII码小,所以第一个返回-1,第二个结果是1

substring的作用是什么?怎么用?

select substring(str, pos,length);
从str的pos下标开始,截取length长度的子字符串,然后返回输出
在这里插入图片描述

如果lenth的值小于0,或者pos+lenth的长度超过了str的总长度,执行substring(str, pos,length);之后会出现什么结果呢?
如果lenth的值小于0,会返回空
如果pos+lenth的长度超过了str的总长度,那就会一直截取到str的末尾

ltrim和rtrim的作用是什么?怎么用?

ltrim(string):去除字符串左侧(前)的空格
rtrim(string):去除字符串右侧(后)的空格
trim(string):去除字符串左右两侧(前和后)的空格
在这里插入图片描述

我现在想获取emp表的ename列的字符集,我该怎么做?

select charset(ename) from emp;在这里插入图片描述

我想在数据库中,以特定格式展示student表中的信息,具体格式为:“XXX的语文是XXX分,数学是XXX分,英语是XXX分” ,我该怎么做?

利用contat将几个字符串连起来
SELECT CONCAT(name, '的语文是', chinese, '分,数学是', math, '分,英语是', english, '分') AS info FROM student;

在这里插入图片描述

我想求学生表中学生姓名占用的字节数 ,我该怎么做?

问题转化:我想查看表中每条记录的name属性信息各占多少字节,我该怎么做?
select lenth(name) from exam_result;
在这里插入图片描述

注意:lenth(str),并不是求str有多少个字符。而是求str占多少个字节

我想将EMP表ename栏所有名字中的S替换成上海,我该怎么做?

这个是原表
在这里插入图片描述

使用replace语句替换ename列中的关键字

在这里插入图片描述

提问:执行过replace语句之后,数据库中ename列中的关键字会被永久修改吗?
不会,这个操作的实际流程是,select先筛选,再对筛选之后的结果(形成一份新文件)进行replace操作

现在我想截取EMP表中ename字段的第二个到第三个字符 ,我该怎么做?

调用substring函数
select substring(ename, 2,1) from emp;

我想以首字母小写的方式显示所有员工的姓名,我该怎么做?

  1. 先使用 SUBSTRING(name, 1, 1) 提取姓名的首字母
  2. 再用 LOWER 函数将其转换为小写
  3. 接着使用 SUBSTRING(name, 2) 获取姓名从第二个字符开始的部分
  4. 最后用 CONCAT 函数将二者拼接起来。
    select concat(lcase(SUBSTRING(name, 1, 1)), SUBSTRING(name, 2)) from emp;

在这里插入图片描述

数学函数

取-100.2的绝对值

select abs(-100.2);

将23.04向上取整

select ceiling(23.04);
ceiling的意思是天花板

将23.7向下取整

select floor(23.7);
floor的英文意思是地板

对12.3456保留2位小数位数(小数四舍五入)

select format(12.3456, 2);

产生随机数

select rand();

将十进制数10转化成二进制数

bin(decimal_number):用于将十进制数转换为二进制数,例如 bin(10) 会得到 ‘1010’

将十进制数15转化成16进制数

hex(decimalNumber):把十进制数转换成十六进制数,像 hex(15) 结果是 ‘F’ 。

将16进制数10转化成2进制数

conv(number, from_base, to_base):实现数的进制转换
其中number 是要转换的数,from_base 是当前进制,to_base 是目标进制

比如 conv(10, 10, 2) 可将十进制的 10 转换为二进制,得到 ‘1010’
conv(10, 2, 16) 可将二进制的 10 转换为16进制,得到 2

求10除以-3的余数

mod(number, denominator):求余函数,计算 number 除以 denominator 的余数
例如 mod(7, 3) 返回 1 。
解释图中的结果
在这里插入图片描述
在 MySQL 中,MOD()函数用于取模运算,其运算规则基于公式a mod b = a - (b * FLOOR(a / b)),这里FLOOR 是向下取整函数 。以下是对图中三个运算的解释:
SELECT MOD(10, -3);
先计算 10 / -3 ,结果约为 -3.33 。
然后对 -3.33 向下取整,得到 -4 。
再根据公式计算 10 - (-3 * -4) = 10 - 12 = -2 ,但 MySQL 中取模结果符号与被除数一致 ,被除数是 10 ,所以最终结果为 1 。

SELECT MOD(-10, 3);
计算 -10 / 3 ,结果约为 -3.33 。
向下取整得到 -4 。
由公式可得 -10 - (3 * -4) = -10 + 12 = 2 ,按照 MySQL 规则,结果符号与被除数一致,最终结果为 -1 。

SELECT MOD(-10, -3);
计算 -10 / -3 ,结果约为 3.33 。
向下取整得到 3 。
依据公式计算 -10 - (-3 * 3) = -10 + 9 = -1 ,结果符号与被除数一致,最终结果就是 -1 。

我现在想生成一个1000以内的随机数

mysql中rand生成随机数的范围是多少?
在 MySQL 里,RAND()函数会生成一个范围在 0(包含)到 1(不包含)之间的随机浮点数

SELECT FLOOR(RAND() * 1000);
SELECT FLOOR(RAND() * 1000); 这条语句的执行结果是一个介于 0 到 999 之间的随机整数(包含 0 和 999)

  1. RAND():生成一个 0(包含)到 1(不包含)之间的随机浮点数,例如 0.1230.987 等。

  2. RAND() * 1000:将随机数放大 1000 倍,结果变为 0(包含)到 1000(不包含)之间的浮点数,例如 123.456999.999 等。

  3. FLOOR(...):对结果进行向下取整,只保留整数部分,且不四舍五入。例如:

    • RAND() * 1000 结果为 123.456FLOOR 后得到 123
    • 若结果为 999.999FLOOR 后得到 999
    • 若结果为 0.123FLOOR 后得到 0

因此,最终结果是 0 到 999 之间的随机整数,每次执行可能返回不同的值。

其他函数

我现在想对一个字符串信息进行摘要加密,我该怎么做?

用md5对密码进行加密:select md5('str')
md5是什么?
MD5(Message-Digest Algorithm 5)属于一种广泛使用的哈希函数,能够把任意长度的数据变换成固定长度(128 位)的哈希值。在数据库里,该函数常常被用于数据加密、数据完整性校验等场景。
在这里插入图片描述
在这里插入图片描述

添加一个新用户时,先对密码进行加密,然后插入insert into user (name, passwd) values ('zhangsan', md5('123456'));
其中md5(‘123456’)表示对密码’123456’进行加密,md5(‘123456’)作为参数,传入value,完成密码的插入

既然如此,那我插入的密码已经不是我最开始的密码了,我还能通过密码在数据库中检索到我刚刚插入的那条记录吗?
可以的兄弟,条件语句可以写成where passwd=md5(‘123456’),这样就能查到

ifnull(val1, val2) 这个表达式的值是多少?

这就是我们C语言中的if语句
if(val1==null) return val2;
else if(val1!=null) return val1;

http://www.xdnf.cn/news/1403677.html

相关文章:

  • 论《运动战》
  • 个性化导航新体验:cpolar让Dashy支持语音控制
  • Tomcat 企业级运维实战系列(四):Tomcat 企业级监控
  • 数值分析——数据误差对函数值的影响
  • nacos 2.5.1 心跳源码解析
  • 基于单片机商用电子计价秤电子秤系统Proteus仿真(含全部资料)
  • 图解LLM(AI大模型)的工作原理
  • Redis 测试:过期 key 内存释放情况
  • 深入理解shared_ptr与循环引用问题
  • node.js ---文件读写(FS模块)
  • 用【Coze】实现文案提取+创作
  • 蓓韵安禧活性叶酸独立包装日期标注
  • 加密软件哪个好用?加密软件-为数据共享提供安全保障
  • 【基础-单选】例如现在要实现一个广告弹窗,包含图片和文本等信息,使用下面那种弹窗可以实现
  • ROS 2 机器人开发$2
  • 项目管理方法论有哪些流派
  • basic_ostream
  • Linux网络基础1(三)之网络与协议栈and网络传输基本流程
  • Yolov8损失函数:回顾Yolov8-Loss
  • 6.1 Update不能写复杂的逻辑
  • HarmonyOS Router 基本使用详解:从代码示例到实战要点
  • 【随笔】【Debian】【ArchLinux】基于Debian和ArchLinux的ISO镜像和虚拟机VM的系统镜像获取安装
  • 4-ATSAM3X8E-FLASH写入
  • Docker(自写)
  • MEM课程之物流与供应链管理课程经典案例及分析-个人原创内容放在此保存
  • 数据结构(C语言篇):(七)双向链表
  • 三重积分从入门到入土
  • 【C++】string
  • Selenium 实战项目:电子商务网站自动化测试
  • Dify的搭建