本节要点
函数介绍
数值函数
文本函数
日期和时间函数
函数的嵌套
函数介绍
继续接着上节课来讲,股票交易表中的交易时间包含了年月日时分秒,只想展示年月日怎么办?
这就需要用到我们这节课中讲解的函数。
什么是函数呢?
函数就是根据输入,按照既定的逻辑返回预期的结果。
比如,有一个绝对值的函数,返回输入数值的绝对值。那么,在调用这个函数时,给定输入-2,就应该返回2,这就是绝对值函数的功能。这里的输入-2,也叫做函数的参数。
在SQL语言中,常见的函数有三类:数值函数、文本函数、日期和时间函数。
函数分类 | 示例 |
数值函数 | 类型转换函数、绝对值函数、指数函数。。。 |
文本函数 | 拼接函数、截取函数、转换函数。。。 |
日期和时间函数 | 格式化函数、截取函数、系统日期。。。 |
不过,不同的数据库,函数及参数差别较大。实际使用时,应该以你使用的数据库支持的函数及参数为准。
数值函数
常见的数值函数及作用和使用示例如下:
函数 | 作用 | 示例 |
abs(n) | 返回n的绝对值 | abs(-3) = 3 |
round(n,d) | 返回n的四舍五入值,保留d位小数 | round(3.234,2) = 3.23 |
rand() | 返回0~1之间的随机数 | rand() 可能返回0.2511382673 |
pow(x,y) | 返回x的y次幂 | pow(2,3) = 8 |
mod(m,n) | 返回m除以n的余数 | mod(7,3) = 1 |
三角函数 | 实现三角运算的函数。如sin,cos,tan等 | sin(90) = 0.89399666360055785 |
(1)、如何从股票交易明细表中返回正数的交易数量?
SELECT volume,abs(volume) FROM t_stock_trans_dtl;
(2)、如何从股票交易明细表中返回交易费用(只保留2位小数位)?
SELECT fee,round(fee,2) FROM t_stock_trans_dtl;
文本函数
常见的文本函数及作用和使用示例如下:
函数 | 作用 | 示例 |
length(str) | 返回字符串str的长度 | length(‘ABCDE’) = 5 |
left(str,n) | 返回字符串str的左端n个字符 | left(‘ABCDE’,3) = ‘ABC’ |
right(str,n) | 返回字符串str的右端n个字符 | right(‘ABCDE’,3) = ‘CDE’ |
trim(str) | 删除str左右两边的空格 | trim(‘ ABC ‘)=‘ABC’ |
upper(str) | 将字符串str转为大写 | upper(‘Abc’) = ‘ABC’ |
lower(str) | 将字符串str转为小写 | lower(‘Abc’) = ‘abc’ |
substring(str,m,n) | 返回从字符串str第m位后面的n个字符 | substring(‘ABCDE’,2,3) = ‘BCD’ |
instr(str1,str2) | 返回字符串str2在str1中首次出现的位置 | instr(‘foobarbar’, ‘bar’) = 4 |
concat(str1,str2,…) | 返回字符串str1,str2,…按顺序拼接后的结果 | concat(‘ABC’,’DEFG’,’H’) = ‘ABCDEFGH’ |
(1)、如何根据股票交易明细表中的股票代码,返回股票所在的证券交易所的代码?
SELECT stock_code,left(stock_code,2) FROM t_stock_trans_dtl; SELECT stock_code,substring(stock_code,1,2) FROM t_stock_trans_dtl;
日期和时间函数
常见的日期和时间函数及作用和使用示例如下:
函数 | 作用 | 示例 |
current_date() | 返回当前日期 | current_date()可能的返回值’2018-02-27’ |
current_time() | 返回当前时间 | current_time()可能的返回值’12:34:10’ |
year(date) | 返回日期date所在的年份 | year(‘2018-02-27’) = 2018 |
month(date) | 返回日期date所在的月份 | month(‘2018-02-27’) = 2 |
day(date) | 返回日期date所在的日 | day(‘2018-02-27’) = 27 |
hour(date) | 返回日期date所在的小时 | hour(’12:40:32’) = 12 |
minute(date) | 返回日期date所在的分钟 | minute(’12:40:32’) = 40 |
dayofyear(date) | 返回date是当年的第几天 | dayofyear(’2018-02-27’) = 58 |
dayofmonth(date) | 返回date是当月的第几天 | dayofmonth(’2018-02-27’) = 27 |
dayofweek(date) | 返回date是当周的第几天(第1天是周日) | dayofweek(’2018-02-27’) = 3 |
date_format(date, 格式) | 返回date格式化后的结果 | date_format(current_date(),’%Y’) = 2018 |
(1)、如何返回股票交易明细表中交易日期(只返回年月日,去掉时分秒)?
SELECT opt_tm,date_format(opt_tm,'%Y-%m-%d’) FROM t_stock_trans_dtl;
函数的嵌套
上面我们举的例子,都是在表达式中使用一个函数的情况,其实,在同一个表达式中,也可以使用两个或多个函数。
(1)、如何根据股票交易明细表中的股票代码,返回股票所在的证券交易所(要求返回大写字母)?
SELECT stock_code,upper(left(stock_code,2)) FROM t_stock_trans_dtl;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。