欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【MySQL】--- 内置函数

【MySQL】--- 内置函数

2025/2/22 2:18:02 来源:https://blog.csdn.net/2301_79448270/article/details/144894194  浏览:    关键词:【MySQL】--- 内置函数

 Welcome to 9ilk's Code World

       

(๑•́ ₃ •̀๑) 个人主页:        9ilk

(๑•́ ₃ •̀๑) 文章专栏:     MySQL



🏠 时间函数

约定:我们在MySQL中说的日期指的是年 月 日,时间指的是时 分 秒。

🧷 now()

select now();

测试结果:

  • now()返回当前日期时间。

🧷 current系列

1. current_date():返回当前日期

select current_date();

测试结果:

2. current_time():返回当前时间

select current_time();

测试结果:

3. current_timestamp(): 返回当前时间戳。

select current_timestamp();

测试结果:

  • 对于时间戳,系统会帮我们自动转化我日期时间。

🧷 date系列

1. date(datetime) :返回参数的日期部分。

select date('1949-10-01 00:00:00');

测试结果:

MySQL中函数也是可以嵌套使用的:

select date(now()); //函数嵌套拿到当前日期

测试结果:

2. date_add(date,interval d_value_type) : 在date中添加日期或时间

  • interval后的数值单位时可以是year minute second  hour day month
  • 可以加上负数也可以加上正数
select date_add('1949-01-01',interval 10 day);
select date_add('1949-01-01',interval -10 day);
select date_add(now(),interval 10 day);
select date_add(now(),interval 10 year);
select date_add(now(),interval 10 minute);
select date_add(now(),interval 10 second);

测试结果 :

3. date_sub() : 在原日期基础上减去参数

  • interval后的数值单位也是year,month,day,hour,minute,second。
select date_sub('1949-01-01',interval -10 month);
select date_sub(now(),interval 10 hour);

测试结果:

4. datediff(date1,date2) : 返回两个日期的差,单位是天

  • 注意是前者-后者
select datediff('2017-10-10','2016-09-01');
select datediff('2010-10-10','2016-09-01');

测试结果:

🧷 案例

1. 案例一:

  • 创建一张表,记录生日
create table tmp(id int primary key auto_increment,birthday date
);

查看表的详细信息:

  • 添加生日
insert into tmp (birthday) values('1980-01-01');
insert into tmp (birthday) values(current_date());
insert into tmp (birthday) values(current_time());

测试结果:

  • 我们发现current_time也可以插入,其实所有时间获取时都有年月日时分秒,只不过不同函数显示不同。

结论:以后我们在时间插入时先看你的需求,是日期你用日期函数就可以了。

2. 案例2

  • 创建一个留言表
create table msg (id int primary key auto_increment,content varchar(30) not null,sendtime datetime
);

查看表的详细信息:

  • 插入数据
insert into msg(content,sendtime) values('hello1', now());
insert into msg(content,sendtime) values('hello2', now());
select * from msg;
  • 显示所有留言信息,发布日期只显示日期,不用显示时间
select content,date(sendtime) from msg;

测试结果:

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

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

测试结果:

🏠 字符串函数

🎵 charset(str): 返回字符串字符集

select charset('abcd');
select charset('中国');
select charset(ename) from emp; //查看表中字段

测试结果:

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

select concat('a','b','c') as res;
select concat('a','b','c',123,3.14) as res;//即便你传的是整数也会转成字符串拼接

测试结果:

注:即便你传的是整数也会转成字符串拼接。

  • 以首字母小写的方式显示所有员工的姓名
select concat(lcase(substring(ename, 1, 1)),substring(ename,2)) from EMP;

测试结果:

🎵 instr(string,substr): 返回substr在string里出现的位置,没有返回0

select instr('abcd1234efg','1234'); //下标从1开始 返回下标5
select instr('abcd1234efg','1134'); //找不到返回0 

测试结果:

  • 要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
select concat(name, '的语文是',chinese,'分,数学是',math,'分') as '分数' from
student;

测试结果:

🎵 ucase lcase

  • ucase:将小写转换成大写字母,其他不是字母的不做处理。
select ucase('abcd1234ABCD');

测试结果:

  • lcase:将大写字母转换成小写字母,不是字母的不处理。
select lcase('abcd1234ABCD');

测试结果:

🎵 left right

  • left(str,length): 从str左边起取length个字符,如果超出字符串长度,有多少取多少 
select left('abcd1234',4);
select left('abcd1234',9);

测试结果:

  • right(str,length):从str右边起,取length个字符,length过大则有多少拿多少。
select right('abcd1234',4);
select right('abcd1234',9);

测试结果:

🎵 length(str): 返回length的长度

select length('abcd1234');
select length(''); 
select length(' '); 

测试结果:

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

select length(name), name from student;

测试结果:

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

说明:在msql中,length()函数返回的是字符串的字节长度,而不是字符的个数。如果字符串中包含非asci字符(如中文字符),它们的字节长度通常大于1,asci字符字节数是1;例子中每个中文字符在utf-8编码下占用3个字节,因此是9。

🎵 replace(str,search str,replace str) : 在str中用rstr替换sstr

select replace(ename, 'S', '上海') ,ename from EMP;

测试结果:

注:实际上这个只是字符串级别的替换,数据库原始数据并不替换。

🎵 substring(str,pos,[length]):从str的pos开始取length个字符,没有给length则取全部

select substring(ename, 2, 2), ename from EMP;

 测试结果:

🎵  ltrim rtrim trim

  • ltrim清空str左边空格
  • rtrim清空str右边空格
  • trim清空左右两边的空格。
select  ltrim('    你好    ');
select  trim('    你好    ');
select  rtrim('    你好    ');

测试结果:

注:如果字符串的字符中间有空格是无法清空的。

🏠 数学函数

🧷 进制转换

1. bin():十进制转二进制

select bin(20);
select bin(3.14);  //其实是转成3
select bin(3.54); 

测试结果:

注:对于浮点数其实是按照它们的整数部分来转的。

2. hex(): 十进制转换成十六进制

select hex(11);
select hex(16); //是1 0不是10

测试结果:

3. conv(num,from_base,to_base):指定进制转换

SELECT conv(10,10,16); //10进制->16进制
SELECT conv(10,10,4);   //10进制->4进制

测试结果:

🧷 数值运算

1. abs(): 绝对值函数

select abs(12) ;
select abs(-12) ;
select abs(-12.3) ;

测试结果:

2. format(num,decimal_places): 格式化,指定保留小数位数

select format(3.1415926,2); //保留两位精度
select format(3.1415926,8); //保留8位精度

测试结果:

3. mod(num,denominator): 取模求余

select mod(10,3);
select mod(-10,-3);
select mod(10,-3);

测试结果:

注:这里取整方式是向0取整。

4. rand():返回随机浮点数,范围[0.0,1.0]

select rand(); //[0.0,1.0]

测试结果:

如果我想范围为[0,100]的浮点数呢?

select rand()*100; //[0.0,1.0]
select format(rand()*100,0); //只要整数部分

测试结果:

5. 取整:ceiling floor

关于取整方式:

  • ceiling:向上取整。
select ceiling(3.1);
select ceiling(3.001);
select ceiling(-3.9);

测试结果:

  • floor:向下取整。
select floor(4.5);
select floor(4.9);
select floor(-4.1);

测试结果:

🏠 其他函数

1.user() 查询当前用户

select user();

测试结果:

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

select database();

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

select md5('admin');

测试结果:

4.password()函数,MySQL数据库使用该函数对用户加密

select password('root');

测试结果:

注: 从MySQL5.7.6开始,PASSWORD()函数已经被废弃(deprecated),而从MySQL8.0 开始,它被完全移除了。你可以使用SHA2来加密。

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

  • 如果第一个参数不为空则用第一个;第一个参数为空,第二个参数不为空则用第二个;两个都为空,返回NULL。
select ifnull('abc', '123');
select ifnull(null, '123');
select ifnull(null, null);

测试结果:


 完。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词