oracle抽取函数-extract()

本文详细介绍了在Oracle数据库中使用EXTRACT函数抽取年月日与时分部分的不同方法,包括直接从SYSDATE抽取与通过TIMESTAMP转换抽取,并指出了使用to_date与to_char函数解决时分部分问题的技巧。
今天在数据升迁的时候遇到了抽取小时、分钟的问题 
oracle的抽取函数是 extrac()
 
语法:
 

SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; return Current Year 
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; return Current Month 
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL; return Current Day 
SELECT EXTRACT(HOUR FROM TIMESTAMP '2010-10-10 10:10:10') FROM DUAL;
SELECT EXTRACT(MINUTE  FROM TIMESTAMP '2010-10-10 10:10:10') FROM DUAL;

 

例子如下:

 

SQL> SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL
  2  ;

EXTRACT(YEARFROMSYSDATE)
------------------------
                    2010

 

SQL> SELECT EXTRACT(month FROM SYSDATE) FROM DUAL
  2  ;

EXTRACT(MONTHFROMSYSDATE)
-------------------------
                        3

 

SQL> SELECT EXTRACT(day FROM SYSDATE) FROM DUAL;

EXTRACT(DAYFROMSYSDATE)
-----------------------
                      3

 

SQL> SELECT EXTRACT(hour FROM SYSDATE) FROM DUAL;

SELECT EXTRACT(hour FROM SYSDATE) FROM DUAL

ORA-30076: 对析出来源无效的析出字段


SQL> SELECT EXTRACT(minute FROM SYSDATE) FROM DUAL;

SELECT EXTRACT(minute FROM SYSDATE) FROM DUAL

ORA-30076: 对析出来源无效的析出字段


SQL> SELECT EXTRACT(HOUR FROM TIMESTAMP '2010-10-10 10:10:10') FROM DUAL;

EXTRACT(HOURFROMTIMESTAMP'2010
------------------------------
                            10


SQL> SELECT EXTRACT(minute FROM TIMESTAMP '2010-10-10 10:10:10') FROM DUAL;

EXTRACT(MINUTEFROMTIMESTAMP'20
------------------------------
                            10


以上是EXTRACT()函数的使用说明,extract 抽取年月日部分和时分部分的使用方法是不同的.
EXTRACT(YEAR FROM SYSDATE)中FROM 的下一个参数是日期类型的时候可以抽取年月日.就是说这个参数是日期类型的时候就
可以抽取年/月/日,而抽取不了时/分部分.抽取时分部分得在FROM 后面加带TIMESTAMP 且后面加时间字符

 

 这里要注意,在(MINUTE FROM TIMESTAMP '2010-10-10 10:10:10')中,如果把'2010-10-10 10:10:10'用日期类型的字段来代替
 并转换成字符类型后,也是错误的,估计是这方法的设计问题.

 

  比如(MINUTE FROM TIMESTAMP to_date(to_char(日期类型,'YYYY-MM-DD hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss')),这样执行不了的.

 

例如:
SQL> select extract(MINUTE FROM TIMESTAMP to_date(to_char(sysdate,'YYYY-MM-DD hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss')) from dual;

 

select extract(MINUTE FROM TIMESTAMP to_date(to_char(sysdate,'YYYY-MM-DD hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss')) from dual

ORA-00907: 缺失右括号

 

如果要从日期类型的字段中抽取时/分部分用to_char() 函数就可以.比如to_char(sysdate,'hh24')抽取小时

 

例如:

 

抽取小时

 

SQL> select to_char(sysdate,'hh24') from dual;

TO_CHAR(SYSDATE,'HH24')
---------------------------------------------------------------------------
21

 

抽取分钟

SQL> select to_char(sysdate,'mi') from dual;

TO_CHAR(SYSDATE,'MI')
---------------------------------------------------------------------------
48

 

抽取秒

SQL> select to_char(sysdate,'ss') from dual;

TO_CHAR(SYSDATE,'SS')
---------------------------------------------------------------------------
42

 

 

------end-----

 

最后用TO_CHAR解决了!

### Oracle EXTRACT 函数使用方法与示例 `EXTRACT` 是 Oracle 数据库中的一个重要函数,主要用于从日期时间戳 (`DATE`, `TIMESTAMP`) 或区间 (`INTERVAL`) 值中提取特定的部分。以下是关于该函数的一些核心知识点以及实际应用案例。 #### 1. **功能概述** `EXTRACT` 的主要作用是从复杂的时间或间隔数据结构中获取指定部分的数据。它可以处理以下几种字段类型: - 年份 (`YEAR`) - 季度 (`QUARTER`) - 月份 (`MONTH`) - 天数 (`DAY`) - 小时 (`HOUR`) - 分钟 (`MINUTE`) - 秒数 (`SECOND`) 此函数通常应用于涉及时间和日期的操作场景下[^5]。 #### 2. **语法格式** ```sql EXTRACT(field FROM source) ``` 其中: - `field`: 要提取的具体组件(如年、月、日等)。 - `source`: 提取目标,可以是一个 `DATE`, `TIMESTAMP`, 或者 `INTERVAL` 类型的列或者表达式。 #### 3. **常见用法** ##### (1)从 DATE/TIMESTAMP 中提取信息 下面的例子展示了如何从当前系统时间中分别抽取不同的组成部分: ```sql SELECT EXTRACT(YEAR FROM SYSDATE) AS year_part, EXTRACT(MONTH FROM SYSDATE) AS month_part, EXTRACT(DAY FROM SYSTIMESTAMP) AS day_part, EXTRACT(HOUR FROM CAST(SYSTIMESTAMP AS TIMESTAMP)) AS hour_part FROM dual; ``` 这段 SQL 查询会返回当前系统的年份、月份、天数和小时数值[^6]。 ##### (2)从 INTERVAL 数据中提取信息 当涉及到两个时间点之间的差异计算时,可能会得到一个 INTERVAL 结果。此时可以用 `EXTRACT` 来进一步解析这些差值成分。 假设我们有如下查询来获得两段时间间的差距并分解其组成单位: ```sql WITH time_diffs AS ( SELECT NUMTODSINTERVAL(87654, 'second') as interval_col FROM DUAL ) SELECT EXTRACT(DAY FROM interval_col) AS days, EXTRACT(HOUR FROM interval_col) AS hours, EXTRACT(MINUTE FROM interval_col) AS minutes, EXTRACT(SECOND FROM interval_col) AS seconds FROM time_diffs; ``` 这里通过创建虚拟表的方式模拟了一个持续时间为若干秒的间隔对象,并利用 `EXTRACT` 获取到了对应的每一天、每个小时、每一分钟及每一秒钟的信息量[^7]。 #### 4. **注意事项** 虽然 `EXTRACT` 功能强大,但在某些情况下需要注意它的局限性和适用范围。例如它仅支持标准 ISO 时间单元而不允许自定义分割逻辑;另外对于跨多个时段的大规模运算可能效率较低等问题都需要开发者提前考虑清楚再决定是否采用这种方法实现业务需求[^8]。 --- ### 示例总结 以上介绍了 Oracle 数据库里 `EXTRACT` 函数的基础概念及其典型应用场景,包括但不限于基本语法规则说明、针对不同输入源的实际操作演示等内容。希望可以帮助到正在学习这一技术要点的朋友!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值