mysql函数 -- 日期函数,字符串函数(转换大小写,格式化显示,截取资产,去掉空格,只将首字母替换成小写字母),数学函数(进制转换,三种取整方式介绍,随机数生成),加密函数,ifnull

目录

函数

日期函数

介绍

date() 

时间的加减

date_add()

datediff()

使用场景

记录生日

留言板

字符串函数

charset()

instr()

转换大小写

截取子串

left()

right()

substring()

length(字符串)

raplace()

去掉左/右空格

ltrim()

rtrim()

trim()

使用

表数据

自定义格式化显示

将特定列替换字符

以首字母小写的方式显示名字

数学函数

进制转换

bin()

conv()

取整

0向取整

向上取整

向下取整

format()

生成随机数

其他函数

加密函数

md5()

password()

ifnull(a,b)

user()


函数

日期函数

介绍

  • 日期 -- 年月日
  • 时间 -- 时分秒
  • 时间戳 -- 年月日+时分秒 =now()

格式:

 

date() 

datetime参数 -- 字符串形式

会返回日期部分:

但如果不是时间戳格式,将返回null:

函数可以嵌套使用 -- date(now())

时间的加减

date_add()

返回日期计算后的结果,参数 -- (日期/时间戳 , interval n year/day/minute/second)

  • n是数字
  • 会自动进行日历换算

date_sub()同理

datediff()

返回两个日期相减的结果(单位:day),参数 -- (日期1,日期2)

使用场景

记录生日
create table tmp(
id int primary key auto_increment,
birthday date
);

只要插入的数据中包含日期,就可以自动转换,返回日期的部分

  • 类似于隐式类型转换

但最好还是我们直接传入/手动转换(使用date()),更清楚一些

留言板

留言板基本信息包括:评论内容+时间戳:

create table msg (
id int primary key auto_increment,
content varchar(30) not null,
sendtime datetime
);

查询两分钟内发布的帖子:

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

字符串函数

charset()

查看字符集编码格式

  • 可以在某些数据异常乱码时查找错误

查询某表某列的格式: select charset(列名) from 表

instr()

查找子串在源串中出现的位置,参数 -- (源串,子串)

  • 起始位置为1

转换大小写

u/lcase(字符串)

  • 转换成大/小写
  • 遇到数字不转换

截取子串

left()

从左边起截取n个字符,参数 -- (源串,字符个数)

right()

从右边起截取n个字符,参数 -- (源串,字符个数)

substring()

从给定位置开始,截取n个字符,参数 -- (源串,起始位置,字符个数)

  • 起始位置还是从1开始

如果想显示从起始位置开始的所有字符,就不用填写第三个参数:

length(字符串)

返回字符串长度, 以字节为单位

  • 空串为0
  • utf8下,汉字字符占3个字节,字母/数字字符占1个字节

raplace()

查找源串中的"目的子串",然后将该子串替换成"替换串"

  • 参数 -- (源串,目的子串,替换串)

只是字符串级别的更换,并没有实际更换数据 

 

去掉左/右空格

避免因多余空格导致的数据比对不成功

ltrim()

去除左边空格

rtrim()

去除右边空格

trim()

去除左右两边空格

使用

表数据
CREATE TABLE exam_result (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL COMMENT '同学姓名',
    chinese float DEFAULT 0.0 COMMENT '语文成绩',
    math float DEFAULT 0.0 COMMENT '数学成绩',
    english float DEFAULT 0.0 COMMENT '英语成绩'
);
 
INSERT INTO exam_result (name, chinese, math, english) VALUES
('小明', 67, 98, 56),
('小红', 87, 78, 77),
('李三', 88, 98, 90),
('赵四', 82, 84, 67),
('李毅', 55, 85, 45),
('钱五', 70, 73, 78),
('宋任', 75, 65, 30);

自定义格式化显示

可以像使用c语言中的printf一样使用concat

假如我们要格式化显示每个人的成绩:

  • select concat(name,'的语文成绩是',chinese,'分,数学成绩是',math,'分,英语成绩是',english,'分') as '成绩表' from exam_result;
将特定列替换字符

以首字母小写的方式显示名字

我们这里使用雇员信息表 -- scott_data.sql · YoungMLet/scott_data - Gitee.com

先将姓名中的第一个字母和其他部分分开 -- left和substring结合使用:

然后将第一个字母转换成小写字母 -- lcase:

最后将两部分拼接在一起 -- concat:

select concat(lcase(left(ename,1)),substring(ename,2)) new_name from emp;

数学函数

进制转换

bin()

转换浮点数时,会先取整,再转换为二进制

conv()

参数 -- (数字,原进制,新进制)

取整

取整有很多方式

我们常用的是四舍五入法

0向取整

直接去掉小数部分

  • 3.1 / 3.7 -> 3
  • -3.1 / -3.7 -> -3
  • c语言中使用的就是0向取整 -- 10/3=3
向上取整

统一朝着让数字变大的方向取整

  • ceiling()就是以向上取整的方式进行取整
向下取整

顾名思义,和向上取整同理,只不过是朝着让数字变小的方向取整

  • floor():

  

format()

将数值格式化为特定的字符串表示形式

  • 添加千位分隔符+指定精度
  • 参数 -- (浮点数,精度位数)

用于显示货币或其他需要特定格式的数值

生成随机数

rand()返回0.0~1.0之间的随机浮点数

如果想要得到0~100之间的随机浮点数,可以对结果*100:

如果想要控制生成的是整数/指定精度的小数,通过嵌套使用format():

其他函数

加密函数

用户密码一定要在数据库中加密保存

不然一旦数据库泄漏,用户隐私也就泄漏了 

md5()

不算严格意义上的加密

  • 密码 -哈希算法> 32位长度的摘要(固定长度)
  • 这样我们在定义密码字段长度时,可以设置成char(32)

查找时,因为表中存入的是经过摘要的字符串

  • 所以也需要将新传入的密码形成摘要,然后就可以和表中数据做对比了
password()

数据库提供的,比md5()更复杂的密码加密方式

  • 一般使用这种方式作为密码加密方式

ifnull(a,b)

  • 如果a!=null,返回a
  • a为null,返回b

类似c/cpp语法中的a==b?a:b

user()

查询当前用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值