PLSQL专项学习之oracle函数EXTRACT

11 篇文章 0 订阅
2 篇文章 0 订阅

EXTRACT (datetime)

  • 语法 
EXTRACT( { { YEAR
           | MONTH
           | DAY
           | HOUR
           | MINUTE
           | SECOND
           }
         | { TIMEZONE_HOUR
           | TIMEZONE_MINUTE
           }
         | { TIMEZONE_REGION
           | TIMEZONE_ABBR
           }
         }
         FROM { expr }
       )

 expr可以是任何与请求字段兼容的datetime或interval数据类型的表达式。

英文不好的朋友,可以直接去看 下面的案例,通俗易懂。

  • If YEAR or MONTH is requested, then expr must evaluate to an expression of datatype DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE, or INTERVAL YEAR TO MONTH.

  • If DAY is requested, then expr must evaluate to an expression of datatype DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITHLOCAL TIME ZONE, or INTERVAL DAY TO SECOND.

  • If HOURMINUTE, or SECOND is requested, then expr must evaluate to an expression of datatype TIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE, or INTERVAL DAY TO SECONDDATE is not valid here, because Oracle Database treats it as ANSI DATEdatatype, which has no time fields.

  • If TIMEZONE_HOURTIMEZONE_MINUTETIMEZONE_ABBRTIMEZONE_REGION, or TIMEZONE_OFFSET is requested, then expr must evaluate to an expression of datatype TIMESTAMP WITH TIME ZONE or TIMESTAMP 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

 产生歧义的原因是表达式中提供了时区数值偏移量,而该数值偏移量可以映射到多个时区区域。

以上内容,都是自己在日常学习时的总结,供参考,欢迎留言交流讨论。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张陈亚

您的鼓励,将是我最大的坚持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值