PLSQL专项学习之oracle函数EXTRACT
EXTRACT (datetime)
- 语法
EXTRACT( { { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND } | { TIMEZONE_HOUR | TIMEZONE_MINUTE } | { TIMEZONE_REGION | TIMEZONE_ABBR } } FROM { expr } )
expr可以是任何与请求字段兼容的datetime或interval数据类型的表达式。
英文不好的朋友,可以直接去看 下面的案例,通俗易懂。
If
YEAR
orMONTH
is requested, thenexpr
must evaluate to an expression of datatypeDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
, orINTERVAL
YEAR
TO
MONTH
.If
DAY
is requested, thenexpr
must evaluate to an expression of datatypeDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
, orINTERVAL
DAY
TO
SECOND
.If
HOUR
,MINUTE
, orSECOND
is requested, thenexpr
must evaluate to an expression of datatypeTIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
, orINTERVAL
DAY
TO
SECOND
.DATE
is not valid here, because Oracle Database treats it as ANSIDATE
datatype, which has no time fields.If
TIMEZONE_HOUR
,TIMEZONE_MINUTE
,TIMEZONE_ABBR
,TIMEZONE_REGION
, orTIMEZONE_OFFSET
is requested, thenexpr
must evaluate to an expression of datatypeTIMESTAMP
WITH
TIME
ZONE
orTIMESTAMP
WITH
LOCAL
TIME
ZONE
.
案例:
- 01下面的示例从oe.orders表返回,订单表每月订单数量:
SELECT EXTRACT(month FROM order_date) "Month", COUNT(order_date) "No. of Orders" FROM orders GROUP BY EXTRACT(month FROM order_date) ORDER BY "No. of Orders" DESC; Month No. of Orders ---------- ------------- 11 15 7 14 6 14 3 11 5 10 9 9 2 9 8 7 10 6 1 5 12 4 4 1 12 rows selected.
- 02下面的示例返回1998年。
SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL; EXTRACT(YEARFROMDATE'1998-03-07') --------------------------------- 1998
- 03下面的示例从示例表hr.employees中选择,所有1998年以后入职的员工:
SELECT last_name, employee_id, hire_date FROM employees WHERE EXTRACT(YEAR FROM TO_DATE(hire_date, 'DD-MON-RR')) > 1998 ORDER BY hire_date; LAST_NAME EMPLOYEE_ID HIRE_DATE ------------------------- ----------- --------- Landry 127 14-JAN-99 Lorentz 107 07-FEB-99 Cabrio 187 07-FEB-99 . . .
从当前时间,提取年、月、日。
select extract(year from sysdate) year,
extract(month from sysdate) month,
extract(day from sysdate) day
from dual;
- 04下面的例子导致歧义,因此Oracle返回UNKNOWN:最后这个如果不太理解,以后慢慢去理解好啦
SELECT EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '1999-01-01 10:00:00 -08:00') FROM DUAL; EXTRACT(TIMEZONE_REGIONFROMTIMESTAMP'1999-01-0110:00:00-08:00') ---------------------------------------------------------------- UNKNOWN
产生歧义的原因是表达式中提供了时区数值偏移量,而该数值偏移量可以映射到多个时区区域。
以上内容,都是自己在日常学习时的总结,供参考,欢迎留言交流讨论。
相关文章
- oracle SQL学习总结
- ORACLE学习
- 【C/C++学院】(24)Oracle数据库编程--管理oracle
- 【工具】一款oracle rac 检查工具
- 【Oracle】oracle的LAG和LEAD分析函数
- 【Python Oracle】使用cx_Oracle 连接oracle的简单介绍
- 【Oracle】修改oracle监听端口
- 《oracle每日一练》Oracle DBLink连接数过多的问题(Ora-02020)
- 《oracle每天一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战
- oracle 学习blogs
- cx_Oracle连接oracle数据库
- Oracle Install logs
- Oracle X$BH
- Oracle性能优化学习笔记之WHERE子句中的连接顺序
- C# 连接Oracle数据库,免安装oracle客户端
- 如何判断Oracle中某个字段的值是否重复
- 【甘道夫】Sqoop1.99.3基础操作--导入Oracle的数据到HDFS
- 一脸懵逼学习oracle(图形化界面操作---》PLSQL图形化界面)
- Oracle SQL 核心
- Oracle 技能强化 Part 9 范围查询
- ORACLE RAC其中几个节点突然宕机,原因:localhost kernel: end_request: I/O error, dev sdi, sector 873749760
- ORACLE学习之隐含参数介绍与查看
- 【ORACLE性能分析和优化思路学习笔记02:什么时候需要对性能进行干预】