oracle视图里的日期,oracle日期处理完全版

posted on 2006-08-10 16:34 xzc 阅读(2488) 评论(8)  编辑  收藏 所属分类: Oracle

dd8840b587f003b2030034d1fbafd5b8.png

评论:

# re: oracle日期处理完全版[未登录]

2007-01-29 12:57 | xzc

select 1,to_char(sysdate,'Day,Month DD,YYYY','NLS_DATE_LANGUAGE = American') from dual  回复  更多评论

# re: oracle日期处理完全版

2007-09-14 12:56 | xzc

Oracle时间日期操作

sysdate+(5/24/60/60) 在系统时间基础上延迟5秒

sysdate+5/24/60 在系统时间基础上延迟5分钟

sysdate+5/24 在系统时间基础上延迟5小时

sysdate+5 在系统时间基础上延迟5天

add_months(sysdate,-5) 在系统时间基础上延迟5月

add_months(sysdate,-5*12) 在系统时间基础上延迟5年

上月末的日期:select last_day(add_months(sysdate, -1)) from dual;

本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual

本周星期一的日期:select trunc(sysdate,'day')+1 from dual

年初至今的天数:select ceil(sysdate - trunc(sysdate, 'year')) from dual;

今天是今年的第几周 :select to_char(sysdate,'fmww') from dual

今天是本月的第几周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" FROM dual

本月的天数

SELECT to_char(last_day(SYSDATE),'dd') days FROM dual

今年的天数

select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

下个星期一的日期

SELECT Next_day(SYSDATE,'monday') FROM dual  回复  更多评论

# re: oracle日期处理完全版

2007-09-14 12:57 | xzc

============================================

--计算工作日方法

create table t(s date,e date);

alter session set nls_date_format = 'yyyy-mm-dd';

insert into t values('2003-03-01','2003-03-03');

insert into t values('2003-03-02','2003-03-03');

insert into t values('2003-03-07','2003-03-08');

insert into t values('2003-03-07','2003-03-09');

insert into t values('2003-03-05','2003-03-07');

insert into t values('2003-02-01','2003-03-31');

-- 这里假定日期都是不带时间的,否则在所有日期前加trunc即可。

select s,e,e-s+1 total_days,

trunc((e-s+1)/7)*5 + length(replace(substr('01111100111110',to_char(s,'d'),mod(e-s+1,7)),'0','')) work_days

from t;

-- drop table t;

引此:http://www.itpub.net/showthread.php?s=1635506cd5f48b1bc3adbe4cde96f227&threadid=104060&perpage=15&pagenumber=1

================================================================================

判断当前时间是上午下午还是晚上

SELECT CASE

WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 6 AND 11 THEN '上午'

WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 11 AND 17 THEN '下午'

WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 17 AND 21 THEN '晚上'

END

FROM dual;

================================================================================

Oracle 中的一些处理日期

将数字转换为任意时间格式.如秒:需要转换为天/小时

SELECT to_char(floor(TRUNC(936000/(60*60))/24))||'天'||to_char(mod(TRUNC(936000/(60*60)),24))||'小时' FROM DUAL

回复  更多评论

# re: oracle日期处理完全版[未登录]

2009-07-05 05:07 | aa

6中的a_date是什么?  回复  更多评论

# re: oracle日期处理完全版

2010-05-13 21:10 | xzc

题目: 输入4个值[2008,12,2009,2], 要求一段SQL, 不另创新表, 得到如下结果:

12 2008-12-1 2008-12-31

01 2009-1-1 2009-1-31

02 2009-2-1 2009-2-28

条件: 起始年, 起始月, 截至年, 截至月

结果: 月份, 月的第一天, 月的最后一天

解答:

Sql代码

select to_char(tt.d, 'mm'), tt.d, last_day(tt.d)

from (select ADD_MONTHS(zz.s, rownum - 1) d

from (select to_date('2008' || '12' || '01', 'yyyymmdd') s,

to_date('2009' || '02' || '01', 'yyyymmdd') e

from dual) zz,

(select * from user_objects)

where rownum <= MONTHS_BETWEEN(zz.e, zz.s) + 1) tt

select to_char(tt.d, 'mm'), tt.d, last_day(tt.d)

from (select ADD_MONTHS(zz.s, rownum - 1) d

from (select to_date('2008' || '12' || '01', 'yyyymmdd') s,

to_date('2009' || '02' || '01', 'yyyymmdd') e

from dual) zz,

(select * from user_objects)

where rownum <= MONTHS_BETWEEN(zz.e, zz.s) + 1) tt

分析: 这个题目比较难, 因为考察了很多的Oracle特有的函数,表(视图).

rownum 行号

ADD_MONTHS 日期函数,给一个日期加一个月数,得到这个月数后的日期

to_date 日期函数, 将一个字符以一定格式转成日期

to_char 字符函数, 以一定格式得到字符

last_day 日期函数, 得到某日所在月的最后一天

MONTHS_BETWEEN 日期函数, 得到两个日期间隔的月数

回复  更多评论

# re: oracle日期处理完全版

2010-05-14 20:35 | xzc

select to_char(cur_month, 'MM'), cur_month, last_day(cur_month)

from (select aa.begin_month, rownum, add_months(aa.begin_month, rownum - 1) cur_month

from (select to_date('2008' || '12', 'YYYYMM') begin_month, to_date('2009' || '02', 'YYYYMM') end_month

from dual) aa,

all_objects bb

where rownum <= months_between(aa.end_month, aa.begin_month) + 1)

回复  更多评论

# re: oracle日期处理完全版[未登录]

2012-06-01 09:36 | xzc

--当月的日列表

select to_char(sysdate - rownum, 'YYYYMMDD') day_id from user_objects where rownum < to_char(sysdate, 'DD');

--某月的日列表

select to_char(to_date('201007', 'YYYYMM') - 1 + rownum, 'YYYYMMDD') day_id

from user_objects

where rownum <= to_char(last_day(to_date('201007', 'YYYYMM')), 'DD');  回复  更多评论

# re: oracle日期处理完全版[未登录]

2012-06-01 10:37 | xzc

--周末

select day_id, to_char(day_id, 'DAY')

from (select to_date('201205', 'YYYYMM') - 1 + rownum day_id

from user_objects

where rownum <= to_char(last_day(to_date('201205', 'YYYYMM')), 'DD'))

where to_char(day_id, 'd') in (1, 7);

select to_char(day_id, 'YYYYMMDD')

from (select to_date('20120526', 'YYYYMMDD') - rownum + 1 day_id

from user_objects

where rownum <= substr(20120526, 7, 2))

where to_char(day_id, 'd') in (1, 7);

--星期一~星期五

select day_id, to_char(day_id, 'DAY')

from (select to_date('201205', 'YYYYMM') - 1 + rownum day_id

from user_objects

where rownum <= to_char(last_day(to_date('201205', 'YYYYMM')), 'DD'))

where to_char(day_id, 'd') in (2, 3, 4, 5, 6);

select to_char(day_id, 'YYYYMMDD')

from (select to_date('20120526', 'YYYYMMDD') - rownum + 1 day_id

from user_objects

where rownum <= substr(20120526, 7, 2))

where to_char(day_id, 'd') in (2, 3, 4, 5, 6);  回复  更多评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值