oracle中extract()函數----用於截取年、月、日、時、分、秒


oracle中extract()函數從oracle 9i中引入,用於從一個date或者interval類型中截取到特定的部分

語法如下:

extract (    

        { year | month | day | hour | minute | second }    

        | { timezone_hour | timezone_minute }    

        | { timezone_region | timezone_abbr }    

from { date_value | interval_value } )

只可以從一個date類型中截取年月日

SQL> select  extract (year from sysdate) year, extract (month from sysdate) month, extract (day from sysdate) day from  dual;

      YEAR      MONTH        DAY
---------- ---------- ----------
      2015          5          4

只可以從一個date類型中截取年月日

SQL> select extract (year from date '2015-05-04') year, extract (month from date'2015-05-04') month, extract (day from date '2011-05-04') day from dual;

      YEAR      MONTH        DAY
---------- ---------- ----------
      2015          5          4

從timestamp中獲取年月日時分秒

select 
 extract(year from systimestamp) year
,extract(month from systimestamp) month
,extract(day from systimestamp) day
,extract(minute from systimestamp) minute
,extract(second from systimestamp) second
,extract(timezone_hour from systimestamp) th
,extract(timezone_minute from systimestamp) tm
,extract(timezone_region from systimestamp) tr
,extract(timezone_abbr from systimestamp) ta
from dual

image

獲取兩個日期之間的具體時間間隔

獲取兩個日期之間的具體時間間隔,extract函數是最好的選擇

select
extract (day from dt2 - dt1) day,
extract (hour from dt2 - dt1) hour,
extract (minute from dt2 - dt1) minute,
extract (second from dt2 - dt1) second
from
(
select
to_timestamp ('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1,
to_timestamp ('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2
from
dual
)

image

獲取interval類型特定部分

select extract(year from interval '21' year) year from dual

Interval 語法

interval '{ integer | integer time_expr | time_expr }' 

{ { day | hour | minute } [ ( leading_precision ) ] 

| second [ ( leading_precision [, fractional_seconds_precision ] ) ] } 

[ to { day | hour | minute | second [ (fractional_seconds_precision) ] } ]
leading_precision值的范圍是0到9, 默認是2. time_expr的格式為:hh[:mi[:ss[.n]]] or mi[:ss[.n]] or ss[.n], n表示微秒.

范圍值:

hour: 0 to 23

minute: 0 to 59

second: 0 to 59.999999999

eg:

interval '4 5:12:10.222' day to second(3)                 表示: 4天5小時12分10.222秒

interval '4 5:12' day to minute                         表示: 4天5小時12分

interval '400 5' day(3) to hour                         表示: 400天5小時, 400為3為精度,所以"day(3)", 注意默認值為2.

interval '400' day(3)                                   表示: 400天

interval '11:12:10.2222222' hour to second(7)           表示: 11小時12分10.2222222秒

interval '11:20' hour to minute                         表示: 11小時20分

interval '10' hour                                      表示: 10小時

interval '10:22' minute to second                         表示: 10分22秒

interval '10' minute                                     表示: 10分

interval '4' day                                         表示: 4天

interval '25' hour                                         表示: 25小時

interval '40' minute                                     表示: 40分

interval '120' hour(3)                                     表示: 120小時

interval '30.12345' second(2,4)                         表示: 30.1235秒, 因為該地方秒的后面精度設置為4, 要進行四舍五入.

interval '20' day - interval '240' hour = interval '10-0' day to second 表示: 20天 - 240小時 = 10天0秒


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM