【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()

当前日期时间

获得当前日期(年月日)

复制代码
select current_date();

获得当前时间(时分秒)

复制代码
select current_time();

获得当前时间戳

复制代码
select current_timestamp();

获得当前日期时间

复制代码
select now();

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

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

函数中可以嵌套函数

在日期的基础上加日期

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

在日期的基础上减去时间

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

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

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

前面减后面

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

创建一张表,记录生日

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

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

但是不建议这样使用。

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

建议还是匹配着使用!

创建一个留言表

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

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

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

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

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

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

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

复制代码
 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列的字符集

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

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

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

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

复制代码
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的长度

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

复制代码
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字段的第二个到第三个字符

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

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

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

复制代码
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() 查询当前用户

复制代码
select user();

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

复制代码
select database();

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

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

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

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

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

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

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

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

相关推荐
白鲸开源16 分钟前
收藏!史上最全 Apache SeaTunnel Source 连接器盘点 (2025版),一篇通晓数据集成生态
大数据·数据库·开源
MonKingWD20 分钟前
MySQL事务篇-事务概念、并发事务问题、隔离级别
数据库·后端·mysql
Monkey-旭1 小时前
Android 文件存储机制全解析
android·文件存储·kolin
我科绝伦(Huanhuan Zhou)1 小时前
银河麒麟V10一键安装Oracle 11g脚本分享
数据库·oracle
zhangphil1 小时前
Android Coil 3拦截器Interceptor计算单次请求耗时,Kotlin
android·kotlin
DokiDoki之父2 小时前
多线程—飞机大战排行榜功能(2.0版本)
android·java·开发语言
秋千码途2 小时前
一道同分排名的SQL题
数据库·sql
用户2018792831674 小时前
强制关闭生命周期延时的Activity实现思路
android
用户2018792831674 小时前
Activity后生命周期暂停问题
android
用户2018792831674 小时前
浅析:WindowManager添加的 View 的事件传递机制
android