动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ SQL技巧 ]的信息

本月文章推荐
.在SQL Server数据库中实现数据的.
.SQL Server自动生成日期加数字的.
.特殊sql语句及优化原则.
.Win2003系统安装SQL Sever2000后.
.深入浅出SQL教程之Group by和Hav.
.三步堵死SQL注入漏洞.
.SQL Server 2005密码安全追踪与存.
.SQL Server 2000启动1069错误(由.
.教你轻松解决数据库非事务表回滚.
.轻松解决SQL Server 2005中的常见.
.SQL Server常用到的几个设置选项.
.SQL Server连接失败错误故障的分.
.让SQL Server为工作负载高峰提前.
.编程管理sql server的帐号.
.讲解Informix Dynamic Server的权.
.配置SQL Server 2000选项.
.深入理解CAST和CONVERT提供的具体.
.深入浅出SQL教程之SELECT语句的自.
.谈数据库中模糊数据的输入与判别.
.使用特殊数据.

sql 语句对时间操作的总结

发表日期:2007-6-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. 日期和字符转换函数

用法(to_date,to_char)

 

2.

select to_char( to_date(222,'J'),'Jsp') from dual

显示Two Hundred Twenty-Two

 

3. 求某天是星期几

select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;

 

select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;

 

设置日期语言

ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';

也可以这样

TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

 

4. 两个日期间的天数

select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

 

5. 时间为null的用法

select id, active_date from table1

UNION

select 1, TO_DATE(null) from dual;

 

注意要用TO_DATE(null)

 

6.

a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')

那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。

所以,当时间需要精确的时候,觉得to_char还是必要的

 

7. 日期格式冲突问题

输入的格式要看你安装的ORACLE字符集的类型, 比如:

US7ASCII, date格式的类型就是: '01-Jan-01'

alter system set NLS_DATE_LANGUAGE = American

alter session set NLS_DATE_LANGUAGE = American

或者在to_date中写

select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多, 可查看

select * from nls_session_parameters

select * from V$NLS_PARAMETERS

 

8.

select count(*)

from ( select rownum-1 rnum

from all_objects

where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-

02-01','yyyy-mm-dd')+1

)

where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )

not

in ( '1', '7' )

 

查找2002-02-28至2002-02-01间除星期一和七的天数

在前后分别调用DBMS_UTILITY.GET_TIME, 然后将结果相减(得到的是1/100秒, 而不是毫秒).

 

9.

select months_between(to_date('01-31-1999','MM-DD-YYYY'),

to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1

 

select months_between(to_date('02-01-1999','MM-DD-YYYY'),

to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1.03225806451613

 

10. Next_day的用法

Next_day(date, day)

 

Monday-Sunday, for format code DAY

Mon-Sun,       for format code DY

1-7,           for format code D

 

11

select to_char(sysdate,'hh:mi:ss') TIME from all_objects

注意:第一条记录的TIME 与最后一行是一样的

可以建立一个函数来处理这个问题

create or replace function sys_date return date is

begin

return sysdate;

end;

select to_char(sys_date,'hh:mi:ss') from all_objects;

 

12. 获得小时数

SQL> select sysdate ,to_char(sysdate,'hh') from dual;

 

SYSDATE TO_CHAR(SYSDATE,'HH')

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

2003-10-13 19:35:21 07

 

SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

 

SYSDATE TO_CHAR(SYSDATE,'HH24')

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

2003-10-13 19:35:21 19

 

获取年月日与此类似

 

 

13. 年月日的处理

select older_date,

newer_date,

years,

months,

abs(

trunc(

newer_date-

add_months( older_date,years*12+months )

)

) days

from ( select

trunc(months_between( newer_date, older_date )/12) YEARS,

mod(trunc(months_between( newer_date, older_date )),

12 ) MONTHS,

newer_date,

older_date

from ( select hiredate older_date,

add_months(hiredate,rownum)+rownum newer_date

from emp )

)

 

14. 处理月份天数不定的办法

select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

 

16. 找出今年的天数

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

 

闰年的处理方法

to_char( last_day( to_date('02' | | :year,'mmyyyy') ), 'dd' )

如果是28就不是闰年

 

17. yyyy与rrrr的区别

'YYYY99 TO_C

------- ----

yyyy 99 0099

rrrr 99 1999

yyyy 01 0001

rrrr 01 2001

 

18.不同时区的处理

select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate

from dual;

 

19.  5秒钟一个间隔

Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')

from dual

 

TO_DATE(FL TO_CH

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

2007-01-01 60368

 

SSSSS表示5位秒数

 

20. 一年的第几天

select TO_CHAR(SYSDATE,'DDD'),sysdate from dual

 

TO_ SYSDATE

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

017 2007-01-17

 

21.计算小时,分,秒,毫秒

select

Days,

A,

TRUNC(A*24) Hours,

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

from

(

select

trunc(sysdate) Days,

sysdate - trunc(sysdate) A

from dual

)

 

 

select * from tabname

order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

 

//

floor((date2-date1) /365)      作为年

floor((date2-date1, 365) /30)  作为月

mod(mod(date2-date1, 365), 30) 作为日.

 

22.next_day函数

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

1 2 3 4 5 6 7

日 一 二 三 四 五 六

 

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

 

select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from dual

日期 返回的是天 然后 转换为ss

上一篇:将sql server中的自动增长序列,初始化为某一值! 人气:3514
下一篇:sql server 2005 批量导入导出 人气:5037
浏览全部sql语句对时间操作的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号