- 浏览: 1208323 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
相加减
select sysdate, (sysdate + 1) as add_a_day, --加1天 (sysdate + 1 / 24) as add_an_hour, --,加1小时 (sysdate + 1 / (24 * 60)) as add_a_minute, --加1分 (sysdate + 1 / (24 * 60 * 60)) as add_a_second --加1秒 from dual
相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统计。那在oracle中应该怎么来写sql语句呢,这个时候Oracle的日期函数会给我们很多帮助。 常用日期型函数 1。Sysdate 当前日期和时间 SQL> Select sysdate from dual; SYSDATE ---------- 21-6月 -05 2。Last_day 本月最后一天 SQL> Select last_day(sysdate) from dual; LAST_DAY(S ---------- 30-6月 -05 3。Add_months(d,n) 当前日期d后推n个月 用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_months) SQL> Select add_months(sysdate,2) from dual; ADD_MONTHS ---------- 21-8月 -05 4。Months_between(f,s) 日期f和s间相差月数 SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))from dual; MONTHS_BETWEEN(SYSDATE,TO_DATE('2005-11-12','YYYY-MM-DD')) ---------------------------------------------------------- -4.6966741 5。NEXT_DAY(d, day_of_week) 返回由"day_of_week"命名的,在变量"d"指定的日期之后的第一个工作日的日期。参数"day_of_week"必须为该星期中的某一天。 SQL> SELECT next_day(to_date('20050620','YYYYMMDD'),1) FROM dual; NEXT_DAY(T ---------- 26-6月 -05 6。current_date()返回当前会话时区中的当前日期 date_value:=current_date SQL> column sessiontimezone for a15 SQL> select sessiontimezone,current_date from dual; SESSIONTIMEZONE CURRENT_DA --------------- ---------- +08:00 13-11月-03 SQL> alter session set time_zone='-11:00' 2 / 会话已更改。 SQL> select sessiontimezone,current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP --------------- ------------------------------------ -11:00 12-11月-03 04.59.13.668000 下午 -11:00 7。current_timestamp()以timestamp with time zone数据类型返回当前会话时区中的当前日期 SQL> select current_timestamp from dual; CURRENT_TIMESTAMP --------------------------------------------------------------------------- 21-6月 -05 10.13.08.220589 上午 +08:00 8。dbtimezone()返回时区 SQL> select dbtimezone from dual; DBTIME ------ -08:00 9。extract()找出日期或间隔值的字段值 date_value:=extract(date_field from [datetime_value|interval_value]) SQL> select extract(month from sysdate) "This Month" from dual; This Month ---------- 6 SQL> select extract(year from add_months(sysdate,36)) " Years" from dual; Years ---------- 2008 10。localtimestamp()返回会话中的日期和时间 SQL> select localtimestamp from dual; LOCALTIMESTAMP --------------------------------------------------------------------------- 21-6月 -05 10.18.15.855652 上午 常用日期数据格式(该段为摘抄) Y或YY或YYY 年的最后一位,两位或三位 Select to_char(sysdate,’YYY’) from dual; 002表示2002年 SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate,’SYEAR’) from dual; -1112表示公元前111 2年 Q 季度,1~3月为第一季度 Select to_char(sysdate,’Q’) from dual; 2表示第二季度① MM 月份数 Select to_char(sysdate,’MM’) from dual; 12表示12月 RM 月份的罗马表示 Select to_char(sysdate,’RM’) from dual; IV表示4月 Month 用9个字符长度表示的月份名 Select to_char(sysdate,’Month’) from dual; May后跟6个空格表示5月 WW 当年第几周 Select to_char(sysdate,’WW’) from dual; 24表示2002年6月13日为第24周 W 本月第几周 Select to_char(sysdate,’W’) from dual; 2002年10月1日为第1周 DDD 当年第几, 1月1日为001,2月1日为032 Select to_char(sysdate,’DDD’) from dual; 363 2002年1 2月2 9日为第363天 DD 当月第几天 Select to_char(sysdate,’DD’) from dual; 04 10月4日为第4天 D 周内第几天 Select to_char(sysdate,’D’) from dual; 5 2002年3月14日为星期一 DY 周内第几天缩写 Select to_char(sysdate,’DY’) from dual; SUN 2002年3月24日为星期天 HH或HH12 12进制小时数 Select to_char(sysdate,’HH’) from dual; 02 午夜2点过8分为02 HH24 24小时制 Select to_char(sysdate,’HH24’) from dual; 14 下午2点08分为14 MI 分钟数(0~59) Select to_char(sysdate,’MI’) from dual; 17下午4点17分 SS 秒数(0~59) Select to_char(sysdate,’SS’) from dual; 22 11点3分22秒 提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。 现在给出一些实践后的用法: 1。上月末天: SQL> select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual; LASTDAY ---------- 2005-05-31 2。上月今天 SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual; PRETODAY ---------- 2005-05-21 3.上月首天 SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual; FIRSTDAY ---------- 2005-05-01 4.按照每周进行统计 SQL> select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww'); TO -- 25 5。按照每月进行统计 SQL> select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm'); TO -- 06 6。按照每季度进行统计 SQL> select to_char(sysdate,'q') from dual group by to_char(sysdate,'q'); T - 2 7。按照每年进行统计 SQL> select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy'); TO_C ---- 2005 8.要找到某月中所有周五的具体日期 select to_char(t.d,'YY-MM-DD') from ( select trunc(sysdate, 'MM')+rownum-1 as d from dba_objects where rownum < 32) t where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期 and trim(to_char(t.d, 'Day')) = '星期五' -------- 03-05-02 03-05-09 03-05-16 03-05-23 03-05-30 如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。 9.oracle中时间运算 内容如下: 1、oracle支持对日期进行运算 2、日期运算时是以天为单位进行的 3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可 4、进行时间进制转换时注意加括号,否则会出问题 SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss'; 会话已更改。 SQL> set serverout on SQL> declare 2 Datue date; 3 begin 4 select sysdate into Datue from dual; 5 dbms_output.put_line('源时间:'||to_char(Datue)); 6 dbms_output.put_line('源时间减1天:'||to_char(Datue-1)); 7 dbms_output.put_line('源时间减1天1小时:'||to_char(Datue-1-1/24)); 8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(Datue-1-1/24-1/(24*60))); 9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(Datue-1-1/24-1/(24*60)-1/(24*60*60))); 10 end; 11 / 源时间:2003-12-29 11:53:41 源时间减1天:2003-12-28 11:53:41 源时间减1天1小时:2003-12-28 10:53:41 源时间减1天1小时1分:2003-12-28 10:52:41 源时间减1天1小时1分1秒:2003-12-28 10:52:40 PL/SQL 过程已成功完成。 在Oracle中实现时间相加处理 -- 名称:Add_Times -- 功能:返回d1与NewTime相加以后的结果,实现时间的相加 -- 说明:对于NewTime中的日期不予考虑 -- 日期:2004-12-07 -- 版本:1.0 -- 作者:Kevin create or replace function Add_Times(d1 in date,NewTime in date) return date is hh number; mm number; ss number; hours number; dResult date; begin -- 下面依次取出时、分、秒 select to_number(to_char(NewTime,'HH24')) into hh from dual; select to_number(to_char(NewTime,'MI')) into mm from dual; select to_number(to_char(NewTime,'SS')) into ss from dual; -- 换算出NewTime中小时总和,在一天的百分几 hours := (hh + (mm / 60) + (ss / 3600))/ 24; -- 得出时间相加后的结果 select d1 + hours into dResult from dual; return(dResult); end Add_Times; -- 测试用例 -- select Add_Times(sysdate,to_date('2004-12-06 03:23:00','YYYY-MM-DD HH24:MI:SS')) from dual 在Oracle9i中计算时间差 计算时间差是Oracle DATA数据类型的一个常见问题。Oracle支持日期计算,你可以创建诸如“日期1-日期2”这样的表达式来计算这两个日期之间的时间差。 一旦你发现了时间差异,你可以使用简单的技巧来以天、小时、分钟或者秒为单位来计算时间差。为了得到数据差,你必须选择合适的时间度量单位,这样就可以进行数据格式隐藏。 使用完善复杂的转换函数来转换日期是一个诱惑,但是你会发现这不是最好的解决方法。 round(to_number(end-date-start_date))- 消逝的时间(以天为单位) round(to_number(end-date-start_date)*24)- 消逝的时间(以小时为单位) round(to_number(end-date-start_date)*1440)- 消逝的时间(以分钟为单位) 显示时间差的默认模式是什么?为了找到这个问题的答案,让我们进行一个简单的SQL *Plus查询。 SQL> select sysdate-(sysdate-3) from dual; SYSDATE-(SYSDATE-3) ------------------- 3 这里,我们看到了Oracle使用天来作为消逝时间的单位,所以我们可以很容易的使用转换函数来把它转换成小时或者分钟。然而,当分钟数不是一个整数时,我们就会遇到放置小数点的问题。 Select (sysdate-(sysdate-3.111))*1440 from dual; (SYSDATE-(SYSDATE-3.111))*1440 ------------------------------ 4479.83333 当然,我们可以用ROUND函数(即取整函数)来解决这个问题,但是要记住我们必须首先把DATE数据类型转换成NUMBER数据类型。 Select round(to_number(sysdate-(sysdate-3.111))*1440) from dual; ROUND(TO_NUMBER(SYSDATE-(SYSDATE-3.111))*1440) ---------------------------------------------- 4480 我们可以用这些函数把一个消逝时间近似转换成分钟并把这个值写入Oracle表格中。在这个例子里,我们有一个离线(logoff)系统级触发机制来计算已经开始的会话时间并把它放入一个Oracle STATSPACK USER_LOG扩展表格之中。 Update perfstat.stats$user_log set elapsed_minutes = round(to_number(logoff_time-logon_time)*1440) where user = user_id and elapsed_minutes is NULL; 查出任一年月所含的工作日 CREATE OR REPLACE FUNCTION Get_WorkingDays( ny IN VARCHAR2 ) RETURN INTEGER IS Result INTEGER; BEGIN SELECT COUNT(*) INTO Result FROM (SELECT MOD(MOD(q.rq-to_date('2001-12-30','yyyy-mm-dd'),7),7) weekday FROM ( SELECT to_date(ny||t.dd,'yyyymmdd') rq FROM (SELECT substr(100+ROWNUM,2,2) dd FROM ljrq z WHERE Rownum<=31 ) t WHERE to_date(ny||t.dd,'yyyymmdd') BETWEEN to_date(ny,'yyyymm') AND last_day(to_date(ny,'yyyymm')) )q ) a WHERE a.weekday NOT IN(0,6); RETURN Result; END Get_WorkingDays; ______________________________________ 还有一个版本 CREATE OR REPLACE FUNCTION Get_WorkingDays( ny IN VARCHAR2 ) RETURN INTEGER IS Result INTEGER := 0; myts INTEGER; --所给年月的天数 scts INTEGER; --某天距2001-12-30所差的天数 rq DATE; djt INTEGER := 1; -- BEGIN myts := to_char(last_day(to_date(ny,'yyyymm')),'dd'); LOOP rq := TO_date(ny||substr(100+djt,2),'yyyymmdd'); scts := rq - to_date('2001-12-30','yyyy-mm-dd'); IF MOD(MOD(scts,7)+7,7) NOT IN(0,6) THEN Result := Result + 1; END IF; djt := djt + 1; EXIT WHEN djt>myts; END LOOP; RETURN Result; END Get_WorkingDays; 以上两个版本的比较 第一个版本一条SQL语句就可以得出结果,不需要编程就可以达到目的。但需要使用任意一张有权访问的、记录条数至少为31的一张表或视图。 第二个版本需要编程,但不需要表或者视图。 这两个版本都还存在需要完善的地方,即没有考虑节日,如五一、十一、元旦、春节这些节假期都没有去除。这些节假日应该维护成一张表,然后通过查表来去除这些节假日。
发表评论
-
Jdbc执行很慢,而PLSQL执行快的问题解决
2016-04-14 13:51 11958最近在检查一方法时发现程序执行SQL查询时非常慢,但使用P ... -
org.apache.commons.dbcp.DbcpException: java.sql.SQLException: 不能在 UTF8 和 UCS2 之间
2016-04-07 14:13 956今天生产环境tomcat启动后,用户登录时系统报错:java ... -
rollup()和rollup(())的区别
2015-08-21 14:50 691引用:http://blog.csdn.net/damen ... -
Oracle hint
2014-09-25 12:31 604转自:http://www.cnblogs.com/ebs ... -
Oracle hint用法
2014-09-25 12:12 4621. /*+ALL_ROWS*/ 表明对语 ... -
Oracle表与索引的分析及索引重建
2014-09-25 12:09 724转自:http://www.cnblogs.co ... -
Oracle的优化器的RBO和CBO方式
2014-09-25 11:30 410转自:http://www.blogjava.net/wx ... -
P6Spy SQL语句拦截工具
2013-08-20 15:58 2030P6Spy P6Spy 是一个可 ... -
ORACLE快照原理及实现总结
2013-03-18 13:23 4169转:http://blog.csdn.net/lingo0 ... -
plsql developer 使用技巧
2013-01-25 17:48 1181plsql developer 使用技巧 Oracle数据 ... -
Oracle字符集查看及修改
2012-12-12 17:04 787Oracle字符集查看及修改 http://blog.csd ... -
Oracle性能优化系列
2012-12-04 13:41 841Oracle删除重复数据的一种高效的方法 Oracle性能优化 ... -
java.sql.SQLException: Io 异常: Got minus one from a read call
2012-12-04 11:14 36121Tomcat服务器下的应用连接Oracle时报错,出现以下异常 ... -
Oracle中round() 函数与trunc()函数的比较
2012-11-29 14:32 891转:http://blog.sina.com.cn/s/blo ... -
Oracle百万记录sql语句优化技巧
2012-11-12 14:56 888转:http://www.cnblogs.com/er ... -
Oracle 获取当前日期及日期格式
2012-11-05 16:26 950转自:http://blog.sina.com.cn/s/bl ... -
Oracle CASE WHEN 用法介绍
2012-11-05 16:19 727转:http://www.cnblogs.com/eshizh ... -
ORACLE 日期加减操作
2012-11-05 15:14 728转自:http://www.cnblogs.c ... -
update关联更新在sqlserver和oracle中的实现[转]
2012-09-18 16:23 986from: http://www.webjx.com/html ... -
plsql developer导入导出数据库方法
2012-06-15 14:23 1236转:http://blog.csdn.net/leeli198 ...
相关推荐
mysql 日期 函数 日期函数 Mysql的日期函数操作
js日期相关操作.txtjs日期相关操作.txt
详细介绍了Java8日期时间相关的api,列举了一些常用的方法,包含java.time、java.time.temporal、java.time.format包下的类和接口操作
标准库中的`datetime`模块提供了日期和时间操作的基本功能,包括创建日期时间对象、日期时间比较、格式化等。`time`模块则专注于处理时间相关操作,如获取当前时间戳、格式化时间等。另外,`calendar`模块提供了处理...
这是我收集的关于数据库中时间格式的一些转换及设置,其中还有时间日期的相关操作,适合有需要的朋友参考
最近写asp程序时用到日期格式转换,因为不同数据库对日期格式要求不一样,这里特别找了一些相关资料,希望对大家有所帮助,如有问题请留言,谢谢!
本文给大家介绍java中常见的日期操作,日期取值、日期转换、日期加减、日期比较,对java日期操作相关知识感兴趣的朋友一起学习吧
对C、C++时间、日期的操作进行详细说明,对使用方法进行实例演示。
一个Java 日期时间操作函数集 DateUtil.java代码,用于时间和日期操作的工具类,DateUtil类包含了标准的时间和日期格式,以及这些格式在字符串及日期之间转换的方法,格式化后的系统当前时间,如果有异常产生,返回...
在网上找到的一组有关定时、日期操作的优秀源码集全,共十四个,非常值得借鉴!
为了答谢广大的oracle迷,本人隆重发一次免费的资源,忘各位前来下载~
关于Excel日期函数的使用操作,汇集了所有有关日期函数的操作与应用!
本内容介绍了“vue中怎么获取当前日期”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体步骤如下:1....
JavaScript的一些工具函数的封装,包括url的参数处理、数字-字符串-日期等相关操作函数
《LINUX操作系统》课程标准 教研室主任: 专业带头人: 系(部)主任: 教务处处长: 教学副院长: 审核批准日期: 二 一 七 年 五 月 《LINUX操作系统》课程标准 (基本信息) 课程编码: 课程类别:专业方向课程 ...
Delphi日期型字段的显示与输入操作实例,是一个基础的数据库操作实例,通过本源码你可了解到: 1:输入掩码为:”yyyy年”的格式. Text:=IntToStr(wYear) '年'; 2:输入掩码为:”yyyy年mm月”的格式. Text:...
本源码资源提供了Java中的日期时间处理类相关内容,包括日期、时间和时区的操作方法和示例。它涵盖了Java编程中常用的日期时间处理需求以及如何使用日期时间类来解决这些问题。 适用人群 本源码资源适用于具备一定...
本文实例讲述了python日期相关操作。分享给大家供大家参考,具体如下: 用 Python 做项目时,经常会遇到与日期转换相关,日期计算相关的功能,动不动就要去查python手册,感觉麻烦,因此把自己常用的一些东西,总结...
主要介绍了C语言计算日期差的方法,结合具体实例形式分析了C语言针对日期转换、运算等相关操作技巧,需要的朋友可以参考下
日期函数是我们经常用到的知识点,下面通过本文给大家介绍JavaScript中日期函数的相关操作知识,非常不错,感兴趣的朋友一起学习吧