暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【每日一练 005】SQL : 单行函数(二)

原创 李美静 2020-06-22
1560

1 嵌套函数

单行函数可以被嵌套任意层,在分析嵌套函数时从最里面的开始分析,一直到最外边。
如:

SELECT last_name,
UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 8), '_US'))
FROM   employees
WHERE  department_id = 60;

解释:
a. 最里面的函数截取了last_name的前8个字符
Result1=SUBSTR(last_name,1,8)
b.外边一层函数在上面Result1的结果基础上添加了_US
Result2=CONCAT(Result1,’_US’)
c.最外层函数将Result2转换为大写
如:

SELECT   TO_CHAR(NEXT_DAY(ADD_MONTHS (hire_date, 6), 'FRIDAY'), 'fmDay, Month ddth, YYYY')   "Next 6 Month Review"  FROM  employees ORDER BY  hire_date;

输出入职6个月以后最近的一个周五的具体日期。

2 数值函数

round:需要四舍五入,可以对column,expression,or value来进行处理
trunc:不需要四舍五入,可以对column,expression,or value来进行处理
以上两个函数都可以用来处理日期数值。
mod:返回余数

3 日期

3.1 处理日期的值

日期默认的格式是DD-MON-RR格式。
sysdate是可以显示当前系统日期和时间的一个函数,返回的值为date或time.
可以通过current_date函数来返回会话所在时区的当前日期。
如:
select sysdate from dual;
一个日期增加或减去一个值结果仍为日期
两个日期相减返回的是两个日期之间相差的天数
一个日期增加小时,可以通过24分之几的方式体现
如:

SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS
FROM   employees
WHERE  department_id = 90;

以上显示了90号部门员工的姓名及入职几周

3.2 日期函数

MONTHS_BETWEEN(date1, date2):
返回date1和date2之间相差的月数。值可以是正数也可以是负数。结果非整数部分表示的是月份的信息。
ADD_MONTHS(date, n):一个日期增加几个月。n必须是整数,可以是负数。
NEXT_DAY(date, ‘char’): 查找指定日期的下一个周几的具体日期。char指定周几,可以是具体的字符,比如周一的英文字符,也可以是数值,那数值-1之后才代表具体的周几。
LAST_DAY(date): 指定日期所在月的最后一天的日期。
ROUND(date[,‘fmt’]):
四舍五入方式,返回具体的’fmt’中指定的日期部分,如果缺省‘fmt’,那么显示最近的day,即几月几日的日期,而不显示时间。
TRUNC(date[, ‘fmt’]): 以截断不进位的方式,返回具体的’fmt’中指定的日期部分,如果缺省‘fmt’,那么显示最近的day,即几月几日的日期,而不显示时间。
如:

SELECT employee_id, hire_date, MONTHS_BETWEEN (SYSDATE, hire_date) TENURE, ADD_MONTHS (hire_date, 6) REVIEW,  NEXT_DAY (hire_date, 'FRIDAY'), LAST_DAY(hire_date) 
FROM employees WHERE  MONTHS_BETWEEN (SYSDATE, hire_date) < 150;

显示入只不足150个月的员的以下信息:员工号,入职日期和入职几个月,入职半年以后的具体日期,入职之后最近的一个周五的日期,入只当月的最后一天日期。
round和trunc既可以用于数值,也可以用于日期。当处理日期时,需要指定日期的显示格式。因此,可以通过round来显示最近的年或月。如果日期格式是月,如果day是1-15号,那么显示当前月,如果day是16-31的信息,那么显示下个月即月份+1。如果日期格式指定的是年,月份是1-6那么显示当前月,如果月份是7-12那么显示下个年即年份+1。
如:

SELECT employee_id, hire_date,
 ROUND(hire_date, 'MONTH'), TRUNC(hire_date, 'MONTH')
FROM   employees
WHERE  hire_date LIKE '%04’

显示04年入职的员的信息:员工号,入职日期,round,trunc分别以月为日期格式来处理的值。

4 总结:

image.png

5 练习题:

下列哪四个选项关于单行函数描述正确?
A. Manipulate data items
B.Accept arguments and return one value per argument
C.Act on each row that is returned
D.Return one result per set of rows
E.May not modify the data type
F.Can be nested
G.Accept arguments that can be a column or an expression

【答题小贴士】:
1、以墨天轮文章的形式解析题目并给出答案
2、将墨天轮文章链接发送到此文的评论区

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论