新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > 数据库综合 > 正文:sql 语句对时间操作的总结

sql 语句对时间操作的总结

新客网 XKER.COM 2007-06-14 来源: 收藏本文

在SQL语句中,常常用会对时间(或日期)进行一些处理,下面是比较通用的一些语句:

延迟:

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(trunc(SYSDATE),'monday') FROM dual

 

 

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

 

计算工作日方法

 

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;

 

 

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

 

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

 

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

TO_DATE格式

Day:

dd number 12

dy abbreviated fri

day spelled out friday

ddspth spelled out, ordinal twelfth

Month:

mm number 03

mon abbreviated mar

month spelled out march

Year:

yy two digits 98

yyyy four digits 1998

 

24小时格式下时间范围为: 0:00:00 - 23:59:59....

12小时格式下时间范围为: 1:00:00 - 12:59:59 ....

 

1. 日期和字符转换函数

共3页: 上一页 [1] [2] [3] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐