Oracle日期操作汇总

字符串转换为日期:
select to_date ('22-FEB-11') from dual; 只有这一种不用加格式
这种情况取决于当前的nls_date_format为'dd-MON-yy',若将当前会话的日期格式修改为'yyyy-mm-dd',select to_date('2011-11-21') from dual; 同样是有效的。
select to_date('2011-2-22','YYYY-MM-DD') from dual;
select to_date('2-22-2011','MM-DD-YYYY') from dual;
select to_date('2011-FEB-22','YYYY-MON-DD') from dual;
select to_date(sysdate) from dual;
select sysdate from dual;


日期转换为字符串:
SELECT to_char('1991-01-01','yyyy-mm-dd') FROM dual; 这样写是错的
可以直接 SELECT to_char('1991-01-01') FROM dual;
也可以 SELECT to_char(to_date('1991-01-01','yyyy-mm-dd')) FROM dual;
但是对于取出的日期,如:
SELECT to_char(hire_date,'yy-MON-day') as "DATE" FROM employees;
可以随意取出想要得到的日期格式如'day','month','yyyy'等。
同样适用于sysdate的情况:
SELECT to_char(SYSDATE,'mon') FROM dual;


日期转换为数字:
要先将日期转换为字符串,再转换为数字。
SELECT to_number(to_char(hire_date,'dd')) as "DATE" FROM employees;
所以能转换成数字的局限于能转换成字符串的,也就仅局限于在数据库中取出的日期。转换类型也只能在'dd','mm','yy','yyyy'之中选择.
不能使用SELECT to_number(sysdate,'dd') from dual;之类。


提取年,月,日(结果为个位数,不显示前面的0)
SELECT EXTRACT(DAY FROM SYSDATE) AS "DATE" FROM dual;
SELECT EXTRACT(MONTH FROM SYSDATE) AS "DATE" FROM dual;
SELECT EXTRACT(YEAR FROM SYSDATE) AS "DATE" FROM dual;




日期运算:
1.与sysdate的运算要先将另一个参数转换为date类型,以date类型进行计算,将结果转换为number类型。两个日期直接相减算出来的是天数。 只要可以转换为日期就能运算,或者比较大小,不在于格式。所以在数据库中取出的日期可以直接进行运算。
SELECT to_number(SYSDATE-to_date('2000-01-01','yyyy-mm-dd'))/365 FROM dual;
SELECT (SYSDATE-to_date('2000-01-01','yyyy-mm-dd'))/365 FROM dual;也能得到同样结果。

2.计算月份
优先使用months_between计算月份差,靠后的月份在前。
SELECT MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') FROM dual;
前后两个日期必须都为date类型:
SELECT MONTHS_BETWEEN(TO_DATE('2016-01-01', 'yyyy-mm-dd'),
TO_DATE('2000-01-01', 'yyyy-mm-dd'))
FROM DUAL;

SELECT MONTHS_BETWEEN(TO_DATE('2016-01-01', 'yyyy-mm-dd'), '01-JAN-00') FROM DUAL;

3.计算相关函数:
ADD_MONTHS ('11-JAN-94',6) 11-Jul-94 添加月份
NEXT_DAY ('01-SEP-95','FRIDAY') 8-Sep-95 下个周五
NEXT_DAY ('01-SEP-95',1) 3-Sep-95 下周第一天,本周日
NEXT_DAY ('1995-09-01',1) 报错
NEXT_DAY (to_date('1995-09-01','YYYY-MM-DD'),1) 3-Sep-95 里面必须是日期类型,常用
LAST_DAY('01-FEB-95') 28-Feb-95 本月最后一天
ROUND('25-JUL-95','MONTH') 1-Aug-95
ROUND('25-JUL-95' ,'YEAR') 1-Jan-96
TRUNC('25-JUL-95' ,'MONTH') 1-Jul-95
TRUNC('25-JUL-95','YEAR') 1-Jan-95

4.其他计算
一年中的第几天:
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual;
计算今年的天数:
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值