【MySQL】函数

函数

点赞 👍👍收藏 🌟🌟关注 💖💖
你的支持是对我最大的鼓励,我们一起努力吧!😃😃

在mysql中其实内置了很多的函数操作,这些函数可以让我们在数据统计的时候以及查表的时候进行各自各样的操作。

1.日期函数

函数名称 描述
current_date() 当前日期
current_time() 当前时间
current_timestamp() 当前时间戳
date(datetime) 返回datetime参数的日期部分
date_add(date,interval d_value_type) 在date中添加日期或者时间 ,interval后的数值单位可以是:year、minute、second、day
date_sub(date,interval d_value_type) 在date中减去日期或者时间 ,interval后的数值单位可以是:year、minute、second、day
datediff(date1,date2) 两个日期的差,单位是天
now() 当前日期时间

获得当前日期(年月日)

powershell 复制代码
select current_date();

获得当前时间(时分秒)

powershell 复制代码
select current_time();

获得当前时间戳

powershell 复制代码
select current_timestamp();

获得当前日期时间

powershell 复制代码
select now();

截断当前时间,只获得日期部分

powershell 复制代码
select date(now());

函数中可以嵌套函数

在日期的基础上加日期

powershell 复制代码
select date_add(now(),interval 10 year);

在日期的基础上减去时间

powershell 复制代码
select date_sub(now(),interval 10 minute);

计算两个日期之间相差多少天

powershell 复制代码
select datediff(now(),'1949-10-01');

前面减后面

这些函数有什么用呢,下面有两个案例

创建一张表,记录生日

powershell 复制代码
create table tmp(
     id int primary key auto_increment,
     birthday date not null #时间的类型 年月日
     );

虽然current_time()这里显示的是时分秒,实际上插入的时候也能插入,所有的时间在获取的时候都是年月日 时分秒,只不过显示时是不一样的。

但是不建议这样使用。

这里时间戳也能插入,你可以理解成隐式类型转化,birthday要的是date日期类型,那么只要你有日期就会把日期拿到。

建议还是匹配着使用!

创建一个留言表

平常我们评论的时候不仅有内容显示出来,还有对应的时间。

powershell 复制代码
create table msg(
     id int primary key auto_increment,
     content varchar(100) not null,
     sendtime datetime #日期时间  年月日 时分秒
     );

这就是根据时间类型建立带时间的表结构

显示所有留言信息,发布日期只显示日期,不用显示时间

powershell 复制代码
select content,date(sendtime) from msg;

请查询在2分钟内发布的帖子

怎么确认表中的数据是2min以内的?

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

2.字符串函数

函数名称 描述
charset(str) 返回字符串字符集(编码集)
concat(string [,...]) 连接字符串
instr(string,substring) 返回substring在strign中出现的位置,没有就返回0
ucase(string) 转换成大写
lcase(string) 转换成小写
left(string,length) 从string中的左边起取length个字符
right(string,length) 从string中的右边起取length个字符
length(string) string的长度
replace(str,search_str,replace_str) 在str中用replace_str替换search_str
strcmp(string1,string2) 逐字符比较两字符串大小
substring(str,position [,length]) 从str的position开始,取length个字符
ltrim(string) rtrim(string) trim(string) 去除前空格或者后空格

charset(str) 返回字符串字符集(编码集)

获取emp表的ename列的字符集

powershell 复制代码
select charset(ename) from emp;

根据字符串得到编码格式,万一表中乱码了可以确认mysql本身编码格式以及插入mysql表中特定字段的编码格式。

concat(string [,...]) 连接字符串

要求显示exam_result表中的信息,显示格式:"XXX的语文是XXX分,数学XXX分,英语XXX分"

powershell 复制代码
select concat(name,'的语文是',chinese,'分,','数学','math','分,','英语',english,'分') from exam_result;

instr(string,substring)返回substring在strign中出现的位置,没有就返回0,注意细节没有就返回0

因为出错返回是0,所以位置是从1开始的。

ucase(string)转换成大写

lcase(string)转换成小写

left(string,length) 从string中的左边起取length个字符

right(string,length) 从string中的右边起取length个字符

length(string) string的长度

求学生表中学生姓名占用的字节数

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

以前说过mysql的字符真的就是一个字符,utf8中一个汉字占3个字节。

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

replace(str,search_str,replace_str) 在str中用replace_str替换search_str

将EMP表中所有名字中有S的替换成'上海'

在怎么换实际只是字符串级别的更换,并不会更改数据库中原始数据

substring(str,position [,length]) 从str的position开始,取length个字符

从特定位置开始截取length长字符串,如果没有指明length就默认截取到结尾

截取EMP表中ename字段的第二个到第三个字符

powershell 复制代码
select ename,substring(ename,2,2) from emp;

以首字母小写的方式显示所有员工的姓名

首先将名字首字母和剩下的区分开,然后将首字母变成小写,然后在拼接

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

ltrim(string) rtrim(string) trim(string)去除前空格或者后空格

3.数学函数

函数名称 描述
abs(number) 绝对值函数
bin(decimal_number) 十进制转换二进制
hex(decimalNumber) 转换成十六进制
conv(number,from_base,to_base) 进制转换
ceiling(number) 向上去整
floor(number) 向下去整
format(number,decimal_places) 格式化,保留小数位数
rand() 返回随机浮点数,返回[0.0,1.0)
mod(number,denominator) 取模,求余

abs(number) 绝对值函数

bin(decimal_number) 十进制转换二进制

hex(decimalNumber) 转换成十六进制

conv(number,from_base,to_base) 进制转换

format(number,decimal_places) 格式化,保留小数位数

rand()|返回随机浮点数,返回[0.0,1.0)

mod(number,denominator) 取模,求余

ceiling(number) 向上去整

floor(number) 向下去整

一般我进行取整的时候是进行四舍五入取整 ,但是除了四舍五入还有其他的取整方式。

我们把丢弃小数部分的取整方式称为0向取整 ,以前我们在C学的9/2=4 就是0向取整、还有向大的方向取的向上取整 、向小的方向取的向下取整


4.其他函数

user() 查询当前用户

powershell 复制代码
select user();

database()显示当前正在使用的数据库

powershell 复制代码
select database();

md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串

比如密码在数据库绝对不能是明文保存的。万一表结构泄漏了,用户信息就全部被泄漏了。

这里有一个细节mysql对于sql里面涉及核心密码password关键字之类的这个sql语句就不会被保存,不能上翻下翻了

密码被变成固定32位字符串,就不用担心密码被泄漏了。但是登录的时候也必须是数据库的摘要密码。

除了md5进行保存密码之外,数据库还提供更复杂的密码设定的函数。
password()函数,MySQL数据库使用该函数对用户加密

在数据库设密码通常用的更多的是password()

ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值

类似于三目操作符 ? : 为真返回第一个,为假返回第二个

相关推荐
尘浮生1 小时前
Java项目实战II基于微信小程序的南宁周边乡村游平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·maven
忘忧记5 小时前
Python MySQL SQLServer操作
android
万岳科技系统开发5 小时前
外卖系统开发实战:从架构设计到代码实现
android·小程序·开源
东阳马生架构5 小时前
MySQL底层概述—1.InnoDB内存结构
java·数据库·mysql
standxy6 小时前
通过轻易云平台实现聚水潭数据高效集成到MySQL的技术方案
android·数据库·mysql
itwangyang5206 小时前
2025 - 科研神器 - 批量处理 PDF、SVG、PNG 和 JPG 文件,将它们转换为彩色 TIFF 文件,并保存到指定的 tiff 文件夹中
数据库·pdf
痞老板A小安装C47 小时前
redis的大key和热key问题解决方案
数据库·redis·bootstrap
feilieren7 小时前
DataGrip 连接 Redis、TongRDS
数据库·redis·缓存
苹果酱05677 小时前
windows安装redis, 修改自启动的redis服务的密码
java·开发语言·spring boot·mysql·中间件
液态不合群7 小时前
Redis中常见的数据类型及其应用场景
数据库·redis·wpf