oracle date var,Oracle Date Calculation

1) Oracle Date Calculation

1@@@@extract and to_char function in plsql block

@@@Example: use the extract function to handle the DATA INTERVAL data type.

SYS@ocm> !cat tmp.sql

DECLARE

--If your table have start_date and end_date, you could calculate

--how many day your work using extract function. It is also functional in

--SQL statement.

date1  VARCHAR2(32767);

BEGIN

date1 := EXTRACT( DAY FROM ( sysdate - to_date('2003-01-04','yyyy-mm-dd') ) DAY TO SECOND )

||' days ' ||

EXTRACT( HOUR FROM ( sysdate - to_date('2003-01-04','yyyy-mm-dd') ) DAY TO SECOND )

|| ' hours '||

EXTRACT( MINUTE FROM ( sysdate - to_date('2003-01-04','yyyy-mm-dd') ) DAY TO SECOND )

|| ' minutes '||

EXTRACT( SECOND FROM ( sysdate - to_date('2003-01-04','yyyy-mm-dd') ) DAY TO SECOND )

|| ' seconds ';

DBMS_OUTPUT.put_line(date1);

END;

/

SYS@ocm> @tmp.sql

3650 days 12 hours 21 minutes 47 seconds

PL/SQL procedure successfully completed.

@@@Use to_char handle the date data type.

HR@ocm> !cat tmp.sql

DECLARE

cur_var     SYS_REFCURSOR;

rec         employees%ROWTYPE;

l_counter   NUMBER := 0;

BEGIN

OPEN cur_var FOR

SELECT * FROM employees;

LOOP

FETCH cur_var INTO rec;

EXIT WHEN cur_var%NOTFOUND;

IF to_char(rec.hire_date,'YYYY')

BETWEEN 2000 AND 2003

THEN

l_counter := l_counter + 1;

END IF;

END LOOP;

DBMS_OUTPUT.put_line('In 2000-2003, company hire '||l_counter||' employees.');

CLOSE cur_var;

END;

/

HR@ocm> @tmp.sql

In 2000-2003, company hire 11 employees.

PL/SQL procedure successfully completed.

2@@@@ extract day information in sql statement

@@@

@@@<1> use built-in function to_char to extract the date information, both sql and pl/sql

@@@

SYS@ocm> !cat tmp.sql

SELECT sysdate FROM dual

/

SELECT  to_char(sysdate,'YYYY') years

, to_char(sysdate,'MM')   month

, to_char(sysdate,'DD')   day

, to_char(sysdate,'HH24') hour

, to_char(sysdate,'MI')   minutes

, to_char(sysdate,'SS')   seconds

FROM dual

/

SYS@ocm> @tmp.sql

SYSDATE

-------------------

2013-01-04 12:47:07

YEAR MO DA HO MI SE

---- -- -- -- -- --

2013 01 04 12 47 07

@@@

@@@<2> use built-in function extract date and date interval information

@@@    both sql/plsql.

@@@extract function for DATE INTERVAL data type

SYS@ocm> !cat tmp.sql

SELECT

extract( YEAR FROM

(sysdate - to_date('2003-01-04','yyyy-mm-dd') )

YEAR TO MONTH )  years

, extract( MONTH FROM

(sysdate - to_date('2003-01-04','yyyy-mm-dd') )

YEAR TO MONTH )  months

FROM dual

/

SELECT

extract( DAY FROM

(sysdate - to_date('2003-01-04','yyyy-mm-dd') )

DAY TO SECOND )  days

, extract( HOUR FROM

(sysdate - to_date('2003-01-04','yyyy-mm-dd') )

DAY TO SECOND )  hours

, extract( MINUTE FROM

(sysdate - to_date('2003-01-04','yyyy-mm-dd') )

DAY TO SECOND )  minutes

, extract( SECOND FROM

(sysdate - to_date('2003-01-04','yyyy-mm-dd') )

DAY TO SECOND )  seconds

FROM dual

/

SYS@ocm> @tmp.sql

YEARS     MONTHS

---------- ----------

10        0

DAYS    HOURS     MINUTES    SECONDS

---------- ---------- ---------- ----------

3653       12          56      6

@@@extract function for DATE data type,

Note: here could not display hour, minute and second.

SYS@ocm> !cat tmp.sql

SELECT

extract( YEAR   FROM (sysdate) ) year

, extract( MONTH  FROM (sysdate) ) month

, extract( DAY    FROM (sysdate) ) day

FROM dual

/

SYS@ocm> @tmp.sql

YEAR    MONTH         DAY

---------- ---------- ----------

2013        1           4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值