​//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​​​​类型中截取 ​​​​year​​​​,​​​​month​​​​,​​​​day​​​​(​​​​date​​​​日期的格式为yyyy-mm-dd);   ​


​//我们只可以从一个 ​​​​timestamp​​ ​​with​​ ​​time​​ ​​zone 的数据类型中截取TIMEZONE_HOUR和TIMEZONE_MINUTE;   ​


​select​​ ​​extract(​​​​year​​ ​​from​​ ​​date​​​​'2011-05-17'​​​​) ​​​​year​​ ​​from​​ ​​dual;   ​


​YEAR​​  


​----------   ​


​2011   ​


​select​​ ​​extract(​​​​month​​ ​​from​​ ​​date​​​​'2011-05-17'​​​​) ​​​​month​​ ​​from​​ ​​dual;   ​


​MONTH​​  


​----------   ​


​5   ​


​select​​ ​​extract(​​​​day​​ ​​from​​ ​​date​​​​'2011-05-17'​​​​) ​​​​day​​ ​​from​​ ​​dual;   ​


​DAY​​  


​----------   ​


​17   ​


​//获取两个日期之间的具体时间间隔,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)   ​


​/   ​


​DAY​​       ​​HOUR​​     ​​MINUTE​​     ​​SECOND​​  


​---------- ---------- ---------- ----------   ​


​102          4          1         46   ​


​--   ​


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


​/   ​


​YEAR​​      ​​MONTH​​        ​​DAY​​     ​​MINUTE​​     ​​SECOND​​         ​​TH         TM TR         TA   ​


​---------- ---------- ---------- ---------- ---------- ---------- ---------- --------- ----------   ​


​2011          5         17          7     14.843          8          0 UNKNOWN   UNK   ​


​//   ​