本篇总结除了sum,if,count,avg这几个实在太常见的以外,小编在实际工作中接触过的其它函数。然后,一如既往地想到哪儿写到哪儿,尽量把差不多的总结到一块儿。
【add_months(),date_add(),date_sub()】
add_months(2017-08-11 17:39:09,1):返回2017-09-11,不带时分秒
date_add(2017-08-11 17:39:09,-31):返回2017-07-11,不带时分秒
date_sub(2017-08-11 17:39:09,31):返回2017-07-11,不带时分秒
三个函数的参数皆可正可负;
date_add()返回指定日期加天数后的日期,date_sub()返回指定日期减天数后的日期,但是由于这个天数的参数可正可负,所以小编暂时还没有找到两个函数作用上的区别点;
add_months()函数返回指定日期加减月份后的日期,没有add_year()和add_week()函数;
【concat(),concat_ws()】
concat('2017','08','11'):返回20170811
concat_ws('-','2017','08','11'):返回2017-08-11
concat()就是把一堆(不限定参数个数)字符串连起来,concat_ws就是把一堆(也不限定参数个数)字符串用指定字符即第一个参数连起来;
【coalecse()】
select ID , coalecse(A_id,B_id,C_id) as ABC_id
结果:
ID ABC_id
1001 1377
1002 74
1003 10978
这个函数就是返回参数中第一个不为空的值,上例出自之前我的一篇叫【sql查询学习随手记-case when】的文章,实际作用也跟那篇文章里case when的作用差不多,大家可以搜两篇对照参考。
【datediff()】
datediff(2017-08-11, 2017-08-22):返回-11
datediff(2017-08-22, 2017-08-11):返回11
这个函数就是返回两个日期参数相差多少天,也挺常见的一个函数。
【date_format(),to_date()】
date_format(2017-08-11 17:39:09,’%y-%m-%d’):返回2017-08-11
to_date(2017-08-11 17:39:09):返回2017-08-11
这两个函数看起来好像没啥区别的样子,但小编实际用的时候发现date_format()这个函数,至少在hive中不识别,运行会报错没有这个函数,而to_date()在mysql中也不行,至今没找到原因,后续查到再做补充。
【find_in_set(),instr(),locate()】
find_in_set('1', '100045678'):返回0
instr('100045678', '1'):返回1
locate('1', '100045678'):返回1
三个函数都是用来查找字符串中某个字符的位置,从实际作用上来讲~~~小编并没有发现毛线的区别,后续发现了再补充吧。
【substr(),substring()】
substr('100045678',1,2):返回10
substr('100045678',-3,2):返回67
substring('100045678',1,2):返回10
substring('100045678',-3,2):返回67
这两个函数的作用是对第一个参数,从第二个参数位置开始截取,截取长度为第三个参数,返回截取的出来的字符串。依然,没有发现两个函数有毛线区别。
【round(),floor(),ceil(),ceiling()】
round(3.1415926 , 2):返回3.14
floor(3.1415926):返回3
ceil(3.1415926):返回4
ceiling(3.1415926):返回4
round()是四舍五入返回指定几位小数的数值;floor()是返回小数的整数数值;ceil()和ceiling()还是没发现这两个函数有什么区别,都是返回大于等于参数的最小整数。
以上,欢迎各位小伙伴补充和分享。