目录
- 日期函数--了解
- ***字符串函数--重要
- 数学函数--了解
- 其他函数--了解
MySql为我们提供了一些内主函数,方便我们对特定数据进行相关操作! 注意:都是配合select使用哦,个人理解SQL的select相当于C中的printf;
日期函数–了解
一般用于insert into插入语句的values()中,将某个时间插入对应字段;
- 获得年月日:
select current_date(); -- current_date()函数,显示的是date类型 datetime
+----------------+
| current_date() |
+----------------+
| 2017-11-19 |
+----------------+
- 获得时分秒:
select current_time();-- current_time()函数, 只显示时分秒;
+----------------+
| current_time() |
+----------------+
| 13:51:21 |
+----------------+
- 获得时间戳:
select current_timestamp();-- current_timestam()函数,显示时间戳 or datetime 类型; 一般用于日志等; now()函数类似;
+---------------------+
| current_timestamp() |
+---------------------+
| 2017-11-19 13:51:48 |
+---------------------+
- 在日期的基础上加日期:
select date_add('2017-10-28', interval 10 day); -- date_add(date,interval 数字 day/month/second)函数 ,可以给一个date类型进行加法; 注意 interval 后的数字可以使负数,相当于减法了;
+-----------------------------------------+
| date_add('2017-10-28', interval 10 day) |
+-----------------------------------------+
| 2017-11-07 |
+-----------------------------------------+
- 在日期的基础上减日期:
select date_sub('2017-10-1', interval 2 day); -- date_sub(date,interval 数字 day/month/second)函数,可以给一个date类型进行减法
+---------------------------------------+
| date_sub('2017-10-1', interval 2 day) |
+---------------------------------------+
| 2017-09-29 |
+---------------------------------------+
- 计算两个日期之间相差多少天:
select datediff('2017-10-10', '2016-9-1'); -- datediff(date1,date2)函数,计算 第一个日期 和 第二个日期 相差的天数,类似于第一个日期 - 第二个日期; 注意结果的正负;
+------------------------------------+
| datediff('2017-10-10', '2016-9-1') |
+------------------------------------+
| 404 |
+------------------------------------+
实际案例:
- 显示所有留言信息,发布日期只显示日期,不用显示时间:
select content,date(sendtime) from msg; -- date(sendtime)函数,取出datetime or 时间戳的 日期部分(省去时:分:秒)!
- 查询在 2分钟内 发布的帖子
select* from msg where date_add(sendtime, interval 2 minute) > now(); -- date_add(sendtime, interval 2 minute) > now()这个限定条件可以通过分析时间轴计算得出;
***字符串函数–重要
- 获取emp表的ename列的字符集:
select charset(ename) from EMP; -- charset(字段)函数,输出utf8(汉字) or binary(int)等;
- 要求显示student表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”
select concat(name, '的语文是',chinese,'分,数学是',math,'分') as mycat from student; -- concat(s1,s2......)函数,拼接多个字符串类型;
- 求学生表中学生姓名占用的字节数
select length(name) ,name from student; -- length(string)函数,计算某个字符串占的 字节数 (注意不是个数,一个汉字 ==3 字节,一个字母 == 1字节);
-- 注意select length(12345) 虽然传进去的是int 12345,但是length内部会转成 '12345'处理,所以长度还是5;
- 将EMP表中所有名字中有 S 的替换成’上海’
select replace(ename, 'S', '上海') ,ename from EMP; -- replace(字段,s1,s2)函数, 将某字段中s1子串替换成s2子串;
- 截取EMP表中ename字段的第二个到第三个字符
select substring(ename, 2, 2) ,ename from EMP; -- substring(字段,pos1,num)函数, 将某字段中pos1位置开始,截取num个字符(无num的话默认取完);
- 以首字母小写,剩余字母大写的方式显示所有员工的姓名
select concat(lcase(left(ename,1)),ucase(substring(ename,2))) from EMP; -- lcase(s) 转小写,ucase(s)转大写,concat(s1,s2)字符串拼接,left(s,n)从s最左侧取n个字符,substring(s,pos,n)从s的pos位置取n个字符(默认取完);
- 去除左侧多余空格
select ltrim()(' abc'); -- ltrim(s)函数; trim()函数是去除双侧空格
- 比较字符串大小;
select strcmp('abc','abc'); -- strcmp(s1,s2) 函数,相当于 逐字符 做减法 比较大下,结果==0 相等, 结果>0 s1>s2 , 结果<0 s1<s2
数学函数–了解
-- 绝对值;
select abs(-100.2); -- 输出 -100;
-- 向上取整
select ceiling(23.04); -- 输出 24
-- 向下取整
select floor(23.7); -- 输出 23
-- 保留2位小数位数(小数四舍五入)
select format(12.3456, 2); -- 输出 12.35
-- 产生0.0~1.0 的随机数
select rand();
-- 产生 3位数 的随机数
select rand()*100 ;
其他函数–了解
-- user() 查询当前用户;
select user();
-- md5(str)对一个字符串进行md5摘要,摘要后得到一个 定长 32位 字符串; -- 企业中对用户密码的 注册储存以及登录验证 操作,类似md5摘要加密算法,不然裸露密码太危险了;
select md5('admin');
-- 显示正在使用的数据库;
select database();
-- ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值;
select ifnull('abc', '123');
+----------------------+
| ifnull('abc', '123') |
+----------------------+
| abc |
+----------------------+
1 row in set (0.01 sec)
-- 类似于C++中的 val1==NULL?val2:val1; 条件成立,返回第二个,不成立返回第一个;
select ifnull(null, '123');
+---------------------+
| ifnull(null, '123') |
+---------------------+
| 123 |
+---------------------+
1 row in set (0.01 sec)
关于md5()函数的加密: