第12课:使用函数创建新的输出字段

本节要点

函数介绍
数值函数
文本函数
日期和时间函数
函数的嵌套

函数介绍

继续接着上节课来讲,股票交易表中的交易时间包含了年月日时分秒,只想展示年月日怎么办?

这就需要用到我们这节课中讲解的函数。

什么是函数呢?

函数就是根据输入,按照既定的逻辑返回预期的结果。

比如,有一个绝对值的函数,返回输入数值的绝对值。那么,在调用这个函数时,给定输入-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;

课后习题:

1、对于第6课课后习题中的论坛注册用户表,请编写SQL完成以下查询。

(1)、表中的主键用户编号字段,是从1开始向上自动递增的。请查询出第2位、第4位、第6位、第8位。。。注册的用户。

(2)、查询QQ号位数在6位及以下的用户。

(3)、查询所有用户的邮箱的用户名。

(4)、查询所有用户的注册年份、月份、日。

(5)、将所在地省、市、区三个段拼接成一个字段展示。

(6)、将用户的手机号脱敏显示。脱敏规则为将手机号的第4-7位用*号替换。如:13812345678脱敏为138****5678。

【版权说明:仅允许非商业转载且请注明出处:Mac私塾 网址:http://macsishu.com】

发表评论

邮箱地址不会被公开。

Captcha Code