方法一:利用months_between 函數計算git
SELECT TRUNC(months_between(sysdate, birthday)/12) AS age
from dual;函數
方法二:日期轉換爲 'yyyyMMdd' 格式後,相差一年的兩個日期差爲:10000,缺點是隻能精確到年,而且不能四捨五入。
select TRUNC((to_char(sysdate, 'yyyyMMdd') - to_char(birth, 'yyyyMMdd')) /
10000) as age
from mytable
it
/**************TRUNC之日期********************/
select trunc(sysdate) from dual ;--2011-3-18 今天的日期爲2011-3-18
select trunc(sysdate, 'mm') from dual ; --2011-3-1 返回當月第一天.
select trunc(sysdate,'yy') from dual; --2011-1-1 返回當年第一天
select trunc(sysdate,'dd') from dual; --2011-3-18 返回當前年月日
select trunc(sysdate,'yyyy') from dual; --2011-1-1 返回當年第一天
select add_months(to_date('2018-01-01','yyyy-mm-dd'),12)-1 from dual; -- 2018-12-31 返回當年第一天
select trunc(sysdate,'d') from dual ; --2011-3-13 (星期天)返回當前星期的第一天
select trunc(sysdate, 'hh') from dual ; --2011-3-18 14:00:00 當前時間爲14:41
select trunc(sysdate, 'mi') from dual ; --2011-3-18 14:41:00 TRUNC()函數沒有秒的精確
SELECT to_date('20180818','yyyymmdd')-to_date('20180727','yyyymmdd') FROM dual;table
/***************TRUNC之數字********************/
/*
TRUNC(number,num_digits)
Number 須要截尾取整的數字。
Num_digits 用於指定取整精度的數字。Num_digits 的默認值爲 0。
TRUNC()函數截取時不進行四捨五入
*/
select trunc(123.458) from dual; --123
select trunc(123.458,0) from dual ;--123
select trunc(123.458,1) from dual ;--123.4
select trunc(123.458,-1) from dual; --120
select trunc(123.458,-4) from dual; --0
select trunc(123.458,4) from dual ;--123.458
select trunc(123) from dual ;--123
select trunc(123,1) from dual ;--123
select trunc(123,-1) from dual ;--120date