![2b57c78154e064a5d3f3c7554f4db9e7.png](https://i-blog.csdnimg.cn/blog_migrate/fe2556949562f2227d012f2026bb6150.jpeg)
前面几篇文章已经接触过一系列SQL函数,本文重点介绍文本和字符串处理函数,日期和时间处理函数,数值处理函数,便于用户编写sql处理格式化、过滤和数据。同时注意,虽然每种数据库管理系统都提供各种函数,但是具体实现差异都比较大,不可移植。我们学习函数,第一有可能很多查询不用函数无法实现,第二虽然很多函数不可移植或者通用,但是每种数据库系统都提供类似功能的函数。
一、日期处理函数
一般数据库中的日期时间类型有date、time、datetime和timestamp,相关函数的主要功能就是处理相关格式转化以及和字符串的转化。
SELECT NOW(),YEAR(NOW()),MONTH(NOW()),DAY(NOW());
![fd71740720cd315b6776225de3f57503.png](https://i-blog.csdnimg.cn/blog_migrate/6b06793404496142a54996112a9fe545.png)
SELECT NOW(),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
![8155fc58bd0d3a89b43b532df92eace1.png](https://i-blog.csdnimg.cn/blog_migrate/1b3d74202d53ff54cbe877320cbce449.png)
SELECT DAYNAME('2019-05-03'),MONTHNAME('2019-05-03'),QUARTER('2019-05-03');
![326847e139531a44a879c950695576ac.png](https://i-blog.csdnimg.cn/blog_migrate/a113c36aa0a5df45ec3f85a617dbbdf7.png)
DAYOFWEEK(date):返回日期date的星期索引(1=星期天,2=星期一, …7=星期六)。
SELECT NOW(),DAYOFWEEK(NOW()),DAYOFMONTH(NOW()),DAYOFYEAR(NOW());
![409d7dd1c5c92159151eaae2d47bb6f0.png](https://i-blog.csdnimg.cn/blog_migrate/da158bb0b009d44dd4804735f10014f4.png)
DATE_ADD(date,INTERVAL expr type) ,进行日期增加的操作,可以精确到秒
DATE_SUB(date,INTERVAL expr type) ,进行日期减少的操作,可以精确到秒
SELECT DATE_SUB(CURDATE(), INTERVAL 31 DAY), CURDATE(),DATE_ADD(CURDATE(),INTERVAL 2 DAY);
![c6fa200ebb261e80c5a6465afd4966d1.png](https://i-blog.csdnimg.cn/blog_migrate/32ae1e49234f8cf040b6b93853d1be91.png)
SELECT NOW(),DATE_ADD(NOW(), INTERVAL "1:1" HOUR_MINUTE), DATE_ADD(NOW(), INTERVAL "3" HOUR);
![e3bbd7287d456266354e69f65801aff7.png](https://i-blog.csdnimg.cn/blog_migrate/41e6c284142ef65ee9522428b67d3508.png)
SELECT CURTIME(),CURDATE(),NOW();
![d8e70d26e80e4fcae3cf6eaedf704d62.png](https://i-blog.csdnimg.cn/blog_migrate/c7d6fe849bbbb44d9fe883814affb4f7.png)
DATE_FORMAT(date,format)函数用于把日期转化各种格式,下表是相关格式说明。
![83693bd52ceb3ecf4da160a10a10a25d.png](https://i-blog.csdnimg.cn/blog_migrate/fb523add3c560534141ee573d056d9e8.jpeg)
SELECT DATE_FORMAT(NOW(),'%m-%d-%Y'),DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p');
![5411dd586279a37ee1e758f29c6eafb0.png](https://i-blog.csdnimg.cn/blog_migrate/112279903e50b4d9865a1a43199e4236.png)
str_to_date('2019-10-16 18:30:24','%Y-%m-%d %H:%i:%s')函数类似和dateformat效果。
时间戳timestamp也是sql常用的一种时间类型。
select from_unixtime(1488160428,'%Y-%m-%d %T'),unix_timestamp(now());
![29c845d99a6d199d6caa88da04f1a6af.png](https://i-blog.csdnimg.cn/blog_migrate/21ce6a91ca8ac4c23564ddb325071875.png)
timestampdiff(interval, datetime1,datetime2),返回时间差,结果单位由interval参数给出,interval有second,minute,hour,day,month,year,week,quarter等。
SELECT TIMESTAMPDIFF(HOUR,'2019-10-01','2020-01-13'), DATEDIFF('2019-10-01','2020-01-13');
![8d50d3e78d0ad45b97abbd506247bd95.png](https://i-blog.csdnimg.cn/blog_migrate/c915d281ea6916e5586f17cf5a719442.png)
二、字符串处理
拼接字段:CONCAT(str1,str2,...):返回来自于参数连结的字符串,可以有多个参数。
SELECT CONCAT(NAME,'(',department,')') FROM student;
![8bf51b19f8480765434f2dd7e241ee7a.png](https://i-blog.csdnimg.cn/blog_migrate/af689f566b894101729df45d181dd389.png)
SELECT LOWER('TEST'), UPPER('test') FROM student;处理大小写转化。
![da569989a95641e63119babc317644d9.png](https://i-blog.csdnimg.cn/blog_migrate/4d5e3d3dd6e3dff8ac36f851a56e807d.png)
注意:sql关键词本身大小写不敏感,也就是selete,from等大小写不影响。
Length返回字符串长度:
SELECT NAME,LENGTH(NAME),department,LENGTH(department) FROM student;
![1e85f062f16a1dface27483f86ca8f27.png](https://i-blog.csdnimg.cn/blog_migrate/e3cbfa1797c77eaf21ecd032785d42c1.png)
trim(char from x) 删除首部、尾部字符,相应的LTRIM和RTRIM处理首部和尾部。
SELECT LTRIM(' student '),TRIM(' student '),RTRIM(student ');
![06d7aeaa1bed24aca052b503a25a2a91.png](https://i-blog.csdnimg.cn/blog_migrate/352c857e702c252267959b15d584db2f.png)
substr(字符串,start [,length]) 取子串
SELECT SUBSTR(NAME,1,1),NAME,SUBSTR(department,1,LENGTH(department)/3-1), department FROM student;
![a2fe04bbe119114f1a972c23812ce2ab.png](https://i-blog.csdnimg.cn/blog_migrate/771aa997ca230969839ac9638d1676e5.png)
replace(x,search_string,replace_string) 字符替换
SELECT REPLACE(department,'系','学院'),department FROM student;
![181536d6806cd20c52f05e3c4081a10d.png](https://i-blog.csdnimg.cn/blog_migrate/d1c20d927ebb22b2b8cfdd069e3480a4.png)
三、数值处理函数
Abs:返回绝对值
Exp:值e的n次方,自然对数的底
Sqrt:返回非负数n的平方根
Pow:返回值x的y次幂
Mod或者%:返回N被M除的余数
Ceiling:不小于X的最小整数值
Round:四舍五入的一个整数
SELECT ABS(-45),CEILING(1.34),ROUND(5.67);
![b6301b5a975bd7d0fa8499fea3268a2f.png](https://i-blog.csdnimg.cn/blog_migrate/9ef311292883f7d6accf877988acb230.png)
SELECT POW(3,2),SQRT(4),EXP(2),MOD(5,2);
![e4057d79f63f0c1e13aa6ac16083cb36.png](https://i-blog.csdnimg.cn/blog_migrate/4be2cdcc8e7fdb1ef6a02ec5a16bf2e0.png)
其他函数还有汇总函数,条件函数,可以参考前面几篇文章。
SQL函数包括大量的可用函数,包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数可以简化用户的操作,使用时可以查询相关资料和手册。