🏠关于专栏:半夜学习MySQL专栏用于记录MySQL数据相关内容。
🎯每天努力一点点,技术变化看得见
日期函数
函数名称 | 描述 |
---|---|
current_date() | 当前日期 |
current_time() | 当前时间 |
current_time() | 当前时间戳 |
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 date_add('2024-1-1', interval 10 day);
●在日期的基础上减去时间
select date_sub('2024-1-15', interval 10 day);
●计算两个日期之间相差多少天
select datediff('2024-1-15', '2024-1-1');
案例1: 创建一张表,用于记录会员编号和会员注册日期
●创建一张会员表
create table vip(
id int unsigned primary key auto_increment,
sign_date date not null
);
●插入数据
insert into vip(sign_date) values(current_date());
insert into vip(sign_date) values(current_time());
insert into vip(sign_date) values(current_timestamp());
select * from vip;
★ps:虽然current_date()、current_time()、current_timestamp()均可时间日期的插入,但这里推荐使用current_date()。
案例2: 创建一个留言板
●创建一个留言表
create table msg(
id int unsigned primary key auto_increment,
content varchar(50) not null,
sendtime datetime
);
●插入数据
insert into msg(content, sendtime) values('沸羊羊', now());
insert into msg(content, sendtime) values('双面龟', now());
select * from msg;
●显式所有留言信息,只显式日期,不显示时间
select id, content, date(sendtime) from msg;
●查询5分钟内发布的贴子
#方法1
select * from msg where date_add(sendtime, interval 5 minute) > now();
#方法2
select * from msg where date_sub(now(), interval 5 minute) < sendtime;
字符串函数
函数名称 | 描述 |
---|---|
charset(str) | 返回字符串字符集 |
concat(str [, …]) | 连接字符串 |
instr(str, substr) | 返回substr在str中出现的位置, 没有则返回0 |
ucase(str) | 转换为大写 |
lcase(str) | 转换为小写 |
left(str, len) | ,从str中左边起取len个字符 |
length(str) | str的长度 |
replace(str, search_str, replace_str) | 在str中用replace_str替换search_str |
strcmp(str1, str2) | 逐字符比较两字符串大小 |
substring(str, position [,length] | 从str的position位置开始,取length个字符 |
ltrim(str) / rtrim(str ) / trim(str) | 去除前空格/后空格/前后空格 |
案例1: 获取emp表的ename列的字符集
select charset(ename) from emp;
案例2: 显式emp表中的信息,显示格式:“员工号为:XXX,姓名为:XXX的员工,岗位为XXX”
select concat('员工号为:', empno, ',姓名为:', ename, '的员工,岗位为', job) from emp;
案例3: 显示员工姓名作战的字节数
select length(ename), ename from emp;
★ps:length函数返回字符串所占的字节数。字母、数字算一个字符,而其他字符,如中文,需要使用多个字符表示(具体与字符集编码有关)。
案例4: 将emp表中所有姓名中有S的替换为“Jammingpro”
select replace(ename, 'S', 'Jammingpro'), ename from emp;
★ps:replace函数对数据的修改仅停留在显示层面,并不会修改表中数据。
案例5: 截取emp表中ename字段的第二个到第三个字符
select substring(ename, 2, 2), ename from emp;
案例6: 以首字母大写的方式,余下字母小写显示所有员工的姓名
select concat(ucase(substring(ename, 1, 1)), lcase(substring(ename, 2))) from emp;
数学函数
函数名称 | 描述 |
---|---|
abs(num) | 绝对值函数 |
bin(decimal_num) | 十进制转换二进制 |
hex(decimal_num) | 十进制转换为十六进制 |
cov(num, from_base, to_base) | 进制转换 |
ceiling(num) | 向上取整 |
floor(num) | 向下取整 |
format(num, decimal_places) | 格式化,保留小数位数 |
rand() | 返回随机浮点数,范围[0.0, 1.0] |
mod(num, denominator) | 取模,求余 |
使用示例:
●绝对值
select abs(-100.12);
select abs(2000.88);
●向上取整
select ceiling(10.1);
select ceiling(10.9);
select ceiling(-4.1);
select ceiling(-4.9);
●向下取整
select floor(10.1);
select floor(10.9);
select floor(-4.1);
select floor(-4.9);
★ps:取整分为零向取整、向上(向下)的整数取整、四舍五入。其中零向取整,10.1、10.9均向更靠近0的数字10取整,-4.1、-4.9向更偏向0的整数4取整。向上取整,10.1、10.9向大于该数的整数11取整,-4.1、-4.9向大于该数的整数-4取整。向下取整,10.1、10.9向小于该数的整数10取整,-4.1、-4.9向小于该数的整数-5取整。ceiling函数采用向上取整,floor函数采用向下取整。四舍五入取整方式这里不再赘述。
●保留2位小数(小数四舍五入)
select format(10.256, 2);
select format(12.123, 2);
●产生随机数
select rand();
select rand();
select rand();
★ps:rand函数用于生产[0,1)间的随机数,rand函数生成的随机数是浮点数。
●模运算
select mod(10, 3);
其他函数
●user()查询当前登陆用户
select user();
●md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
select md5('jammmingpro');
select md5('a');
select md5('');
●database()显示当前正在使用的数据库名称
select database();
●pwssword()函数用于对用户密码做加密,但该函数于MySQL5.7.6开始已经被弃用,因为它使用的哈希算法(DOUBLE SHA1)被认为较弱,不再适合用于密码存储。
select password('jammingpro');
●ifnull(val1, val2),如果val1为null,返回val2,否则返回val1的值
select ifnull('xiaoming', 'jammingpro');
select ifnull(null, 'jammingpro');
🎈欢迎进入半夜学习MySQL专栏,查看更多文章。
如果上述内容有任何问题,欢迎在下方留言区指正b( ̄▽ ̄)d