oracle抽取函数-extract()

oracle抽取函数

 

抽取时间的“小时”

 

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-----

### SQL中EXTRACT函数的使用方法 #### 1. EXTRACT函数概述 `EXTRACT` 是一种常用的SQL函数,主要用于从日期或时间类型的字段中提取指定部分的数据。这些部分可以是年份、月份、天数、小时、分钟等[^1]。 其基本语法如下: ```sql EXTRACT(field FROM source) ``` 其中 `field` 表示要提取的时间单位(如YEAR、MONTH、DAY),而 `source` 则表示包含完整时间戳的目标列或表达式。 --- #### 2. 示例说明 ##### (1) 提取年份 以下是从一个时间戳中提取年份的例子: ```sql SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-08-15 14:30:00') AS year; -- 结果:2023 ``` 此查询会返回时间戳中的年份部分[^5]。 ##### (2) 提取月份 如果需要获取某个日期对应的月份,则可执行以下语句: ```sql SELECT EXTRACT(MONTH FROM DATE '2023-08-15') AS month; -- 结果:8 ``` ##### (3) 嵌入式SQL应用实例 在某些编程环境中,也可以通过嵌入式SQL调用该功能。例如,在ObjectScript语言中实现字符串操作时,可以通过 `$EXTRACT` 函数完成类似的任务[^2]: ```objectscript ClassMethod ExtractExample() { SET a = "ABCD" &sql(SELECT $EXTRACT(:a, 2) INTO :y) IF SQLCODE '= 0 { WRITE !, "Error code ", SQLCODE } ELSE { WRITE !, "The extracted character is ", y } } ``` 上述代码片段展示了如何利用 `$EXTRACT` 方法来选取字符串中的第N个字符并存储到变量中。 --- #### 3. 不同数据库系统的支持情况 虽然大多数关系型数据库都实现了类似的逻辑,但在具体写法上可能存在差异。例如 Oracle 和 PostgreSQL 都提供了标准形式的支持;而在 MySQL 中则需借助其他方式间接达成目标[^4]^。 对于 Hadoop 平台上的大数据分析工具 Apache Hive 来说,尽管它本身并不直接提供名为 `EXTRACT()` 的内置命令,但它拥有丰富的自定义 UDF(User Defined Function),能够满足复杂的业务需求[^3]。 --- ### 注意事项 当尝试跨平台迁移涉及此类运算符的应用程序时,请务必确认源端与目的端之间是否存在兼容性问题以及相应的替代方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值