MySQL内置函数

一.日期函数

1. 日期函数的介绍及使用

image-20230729145616311

  • current_date()

获得年月日:

image-20230729145710592

  • current_time()

获得时分秒:

image-20230729145756437

将前二者结合:

image-20230729145919680

  • current_timestamp()

获得时间戳:

image-20230729145847795

相同作用的函数还有now():

image-20230729150325747

  • date函数

date(datetime),datetime可以是各种日期,也可以是上述的各类函数,最终得到的是所述内容中的日期部分。

常量

image-20230729150420220

各类函数:

image-20230729150638892

  • date_add(date, interval d_value_type)

在日期的基础上加日期:

interval后面的数值单位可以是:year、month、day。

image-20230729151345553

date也可以是函数的返回值

image-20230729151430988

  • date_add(date, interval d_value_type)

在日期的基础上减日期:

interval后面的数值单位可以是:year、month、day。

image-20230729151610034

date也可以是函数的返回值

image-20230729151647772

  • datediff(date1, date2)

l两个日期的差,即date1-date2,单位是天。

image-20230729152012801

当然,date一样可以是函数的返回值

image-20230729152114239

2. 日期函数样例

案例-1:

  • 创建一张表,记录生日
create table tmp(
id int primary key auto_increment,
birthday date
);
  • 插入数据
insert into tmp(birthday) values(current_date());
insert into tmp(birthday) values(date(current_timestamp()));

image-20230729153029219

案例-2:

  • 创建一个留言表
create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);
  • 插入数据
insert into msg(content,sendtime) values('像风一样', now());
insert into msg(content,sendtime) values('致未来的我', now());
  • 显示所有留言信息,发布日期只显示日期,不用显示时间

image-20230729155041919

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

image-20230729155308969

有两种方式去查询,即通过date_add()比较,或者通过date_sub比较。但都是一个道理。

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

image-20230729155625936

或者:

select * from msg where date_sub(now(), interval 2 minute) < sendtime;

image-20230729155736157

二.字符串函数

1. 字符串函数的介绍

image-20230729155814111

  • charset(str)

获取emp表的ename列的字符集

image-20230729163155394

image-20230729163214197

  • concat(string2, […])

连接字符串

image-20230729163404280

  • instr(string,substring)

判断substring是否出现在string中,若找到,则返回匹配的起始位置。找不到则返回0

image-20230729164406324

  • ucase(string)

小写转大写

image-20230729164711619

  • lcase(string)

大写转小写

image-20230729164753493

  • left(string2, length)

从string2的左边起提取length个字符

image-20230729165043975

也有right,即从string2的右边起提取length个字符,就不一一演示了。

  • length(string)

求字符串长度

image-20230729165213303

  • strcmp(string1, string2)

比较string1与string2大小

image-20230729165457439

  • 去除空格

ltrim(string) :去除左空格

rtrim(string): 去除右空格

trim(string):去除字符串的左右空格。

image-20230729174847455

其余的函数就通过下面的具体样例演示:

2. 字符串函数样例

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

image-20230729171630452

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

image-20230729171933059

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

image-20230729172400951

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

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

image-20230729173510010

这种改变是在select时的改变,其并不会改变数据库的数据,仅仅是显示时的替换。

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

image-20230729173735053

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

先显示

image-20230729174357459

再拼接

image-20230729174443109

三.数学函数

image-20230729175434855

  • 绝对值
select abs(-100.2);

image-20230729175650248

  • 十进制转换二进制
select bin(100);

image-20230729175807865

  • 十进制转换十六进制
select hex(100);

image-20230729175856776

  • 任意进制之间转换

例如:将100从10进制转换成2进制

select conv(100, 10, 2);

image-20230729180010267

  • 向上取整
select ceiling(100.5);

image-20230729180138024

  • 向下取整
select floor(23.7);

image-20230729180223127

  • 格式化,保留小数位数

比如将3.1415926保留两位小数:

select format(3.1415926, 2);

image-20230729180439693

  • 产生随机数
select rand();

image-20230729180539103

  • 取模,求余
select mod(10, 3);

image-20230729180742429

ps:关于负数取模,这里不演示。

以上的函数都可以嵌套,即任意一个函数的返回值可以充当另一个函数的参数,如果这个函数存在参数,并且类型满足的话。

四.其他函数

  • user() 查询当前用户
select user();

image-20230729194732055

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

image-20230729194901301

image-20230729195120963

产生的子串是等长的,这也就意味着,在select按照密码匹配的时候,就需要根据md5(‘密码’)映射出对应的32位字符,才可以匹配成功。

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

image-20230729195259459

  • password()函数,MySQL数据库使用该函数对用户加密
select password('123');

相比md5,此函数更普遍受用。

image-20230729195602475

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

image-20230729195809802

扩展:

若数据库执行语句字段包含password字段,则我们在上翻下翻时就查不到历史对应的语句。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都要进步呀~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值