目录

MySQL篇MySQL内置函数

【MySQL篇】MySQL内置函数


1,日期函数

日期类型在之前文章【数据类型】中有描述

传送门:

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

https://i-blog.csdnimg.cn/direct/0c16596d32bd4cb680b1074ca1f7bc1f.png

  • 获得当前日期(时分秒)

https://i-blog.csdnimg.cn/direct/cc1adde431cd446884d980af19e1c725.png

  • 获取当前日期

https://i-blog.csdnimg.cn/direct/5120a00d494a455985e0ecb527235c2c.png

  • 获得时间戳

https://i-blog.csdnimg.cn/direct/998ecfda236f40c481da1cf03b1bb7e1.png

  • 在日期的基础上加上日期

https://i-blog.csdnimg.cn/direct/bd118f0f5850470f912599e608b58e32.png

  • 在日期的基础上减去时间

https://i-blog.csdnimg.cn/direct/bfab7fc6339546afa1bda05faf4a542c.png

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

https://i-blog.csdnimg.cn/direct/d649e52e133a418a9ca4fcb02f0154f6.png

案例1:创建一张生日表,记录生日

mysql> create table tmp(

-> id int primary key auto_increment,

-> birthday date);

  • 添加当前日期

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

https://i-blog.csdnimg.cn/direct/2f2f9b26008e4318a0e249e86e279d0d.png

  • 案例2:创建一张留言表

**mysql> create table msg(

-> id int primary key auto_increment,

-> content varchar(30) not null,

-> sendtime datetime);**

  • 插入数据

mysql> insert into msg (content,sendtime) values (‘hello1’,now());

mysql> insert into msg (content,sendtime) values (‘hello2’,now());

https://i-blog.csdnimg.cn/direct/97266a63b06f4c559d70185b6a8cdf81.png

  • 显示所有留言信息,只显示日期,不显示时间

mysql> select content, date (sendtime) from msg;

https://i-blog.csdnimg.cn/direct/b5ada8980e2b4887bc743f8604ebd3d8.png

  • 查询2分钟内发布的留言

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

https://i-blog.csdnimg.cn/direct/8c08c620fc43416bba7cf7d300f19bfe.png

2,字符串函数

charset(str)返回str的字符集
concat(string,[…])连接字符串
instr(str,substring)返回substring在str中出现的位置,没有返回0
ucase(string2)转换成大写
lcase(string2)转换成小写
left(string2,length)从string2的左边起,取length个字符
length(string)string的长度,单位是字节
replace(str,search_str,raplace_str)在str中用replace_str替换search_str
strcmp(string1,string2)比较两字符串的大小
substring(string,postion,length)从string的postion开始,读取length个字符
ltrim(string)    rtrim(string)   trim(string)去除前空格或后空格(见示例)

示例:

  • 查看字符的编码集

https://i-blog.csdnimg.cn/direct/983757f7b8204b369b68a088eafcd066.png

  • 连接字符串

https://i-blog.csdnimg.cn/direct/232b2493658c4b42872050e700804d89.png

  • 判断一个字符是否在另一个字符串中出现

https://i-blog.csdnimg.cn/direct/f1ee965bc3464f40bb73f0f98383e1d9.png

  • 大小写转换

https://i-blog.csdnimg.cn/direct/126393c2cc2a4077aaa393bfd0c54bee.png

  • left,right函数

https://i-blog.csdnimg.cn/direct/918413ffeaf84273a53e8ef7a143258e.png

  • length求字符串长度,单位是字节 (utf8下一个整数3个字节)

https://i-blog.csdnimg.cn/direct/464866e5201d458f851af6fa039b3f86.png

案例:

  • 首先创建一张员工表

https://i-blog.csdnimg.cn/direct/73968c91a83b407f8b87a551cdb1f305.png

  • 插入数据

https://i-blog.csdnimg.cn/direct/b2a5f7ac0c3e4c2881757599ffa4aac5.png

  • 获取emp表的ename列的字符集 (如果表中有些部分出现乱码,可以查看插入数据的编码和mysql的编码是否一致)

mysql> select charset(ename) from emp;

https://i-blog.csdnimg.cn/direct/72b9086470714a80af0a5255da928a1e.png

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

mysql> select ename,replace(ename,‘S’,‘上海’)  from emp;

https://i-blog.csdnimg.cn/direct/05348f4f451947b4bad780c32eee30ed.png

  • 截取emp表中ename字段的第2到3个字符

mysql> select ename,substring(ename,2,2) from emp;

https://i-blog.csdnimg.cn/direct/bd75ad5f596448259caff88997923df2.png

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

mysql> select concat(lcase(substring(ename,1,1)),substring(ename,2)) from emp;

https://i-blog.csdnimg.cn/direct/505f7766e10d4057b4998f5a18b8403b.png

3,数学函数

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

示例:

  • 绝对值

https://i-blog.csdnimg.cn/direct/1638c756537f4869811ceba088e1a7e8.png

  • 向上取整

https://i-blog.csdnimg.cn/direct/4c3f2aa7e77d48afbf4664369ac643df.png

  • 向下取整

https://i-blog.csdnimg.cn/direct/c4ad9a4d0c5c4c3caf3269eece8b50d5.png

  • 保留两位小数位数 (四舍五入)

https://i-blog.csdnimg.cn/direct/573225cf9a8d474ab2405bd10038cda8.png

  • 十进制转化成二进制

https://i-blog.csdnimg.cn/direct/c2dc0c04be3d4e76b5e43afb6df6192b.png

  • 把一个数字从一个进制转化成另一个进制

https://i-blog.csdnimg.cn/direct/6c7c89f4c1fa4e46b8df6ac99180e8e2.png

  • 转化成十六进制

https://i-blog.csdnimg.cn/direct/d269ec820f4f4e128117308f466ef7b6.png

  • 产生随机数

https://i-blog.csdnimg.cn/direct/6503b63dbc8746d98a653d55c97ec587.png

4,其他函数

  • user查询当前用户

mysql> select user();

  • md5(str)对一个字符串进行md5摘要,摘要后的得到一个32位字符串 ,可以保证用户信息的安全性

https://i-blog.csdnimg.cn/direct/bd99637940dc43a68df9b6a354f350fb.png

**mysql> create table user(

-> id int primary key auto_increment,

-> name varchar(20),

-> password char(32) not null);**

插入数据

**mysql> insert into user (name,password) values (‘张三’,md5(‘12345’));

mysql> insert into user (name,password) values (‘李四’,md5(‘21090’));**

https://i-blog.csdnimg.cn/direct/3a37c7495ba94f0aa950c041cdb832b6.png

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

mysql> select database();

  • ifnull(val1,val2),如果val为null,返回val2。否则返回val1

https://i-blog.csdnimg.cn/direct/d8380f2cc67c4325a5b37fb318065009.png

实战OJ

https://i-blog.csdnimg.cn/direct/31b7c29878f143228d4899258df50d89.png

select id,length(string)-length(replace(string,',','')) cnt from strings;