




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle 日期时间用法 .txt 永远像孩子一样好奇, 像年轻人一样改变, 像中年人一样耐心, 像 老年人一样睿智。我的腰闪了,惹祸的不是青春,而是压力。 。当女人不再痴缠,不再耍 赖,不再喜怒无常,也就不再爱了。 PURGE RECYCLEBIN转一篇 oracle 日期时间用法的文章,十分有用!相信很多人都有过统计某些数据的经历, 每月,甚至每个星期来分别统计。 那在 的日期函数会给我们很多帮助。比如, 要统计财务的情况, 可能要按每年, 每季度, oracle 中应该怎么来写 sql 语句呢, 这个时候 Oracle常用日期型函数1。 Sysdate 当前日期和时间 SQL>
2、Select sysdate from dual;SYSDATE 21-6 月 -052。Last_day 本月最后一天SQL> Select last_day(sysdate) from dual;LAST_DAY(S 30-6 月 -05n 个月3。Add_months(d,n) 当前日期 d 后推 用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_months)SQL> Select add_months(sysdate,2) from dual;ADD_MONTHS 21-8 月 -054。Month
3、s_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.69667415。NEXT_DAY(d, day_of_week)返回由 "day_of_week" 命名的,在变量 "d" 指定的日期之后的第一个工作日
4、的日期。参数 "day_of_week" 必须为该星期中的某一天。SQL> SELECT next_day(to_date('20050620','YYYYMMDD'),1) FROM dual;NEXT_DAY(T 26-6 月 -056。current_date() 返回当前会话时区中的当前日期 date_value:=current_dateSQL> column sessiontimezone for a15SQL> select sessiontimezone,current_date from dual;SESS
5、IONTIMEZONE CURRENT_DA+08:0013-11月-03SQL> alter session set time_zone='-11:00' 2 / 会话已更改。SQL> select sessiontimezone,current_timestamp from dual;SESSIONTIMEZONE CURRENT_TIMESTAMP-11:0012-11月-03 04.59.13.668000下午 -11:00以 timestamp with time zone 数据类型返回当前会话时区中的当前7。current_timestamp() 日期
6、SQL> select current_timestamp from dual;CURRENT_TIMESTAMP 21-6 月 -05 10.13.08.220589 上午 +08:008。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
7、) "This Month" from dual;This MonthSQL> select extract(year from add_months(sysdate,36) " Years" from dual;Years200810。 localtimestamp() 返回会话中的日期和时间 SQL> select localtimestamp from dual;LOCALTIMESTAMP21-6 月 -05 10.18.15.855652 上午常用日期数据格式(该段为摘抄)Y 或 YY或 YYY 年的最后一位,两位或三位Select
8、 to_char(sysdate, ' YYY ) from dual002 表示 2002 年SYEAR或YEARSYEAR使公元前的年份前加一负号Selectdual ; -1112 表示公元前 111 2 年Q 季度,1 3 月为第一季度 Select to_char(sysdate,MM月份数 Select to_char(sysdate, ' MMRM 月份的罗马表示 Select to_char(sysdate,Month 用 9 个字符长度表示的月份名 Select后跟 6 个空格表示 5 月WW当年第几周 Select to_char(sysdate,为第 24
9、 周W 本月第几周 Select to_char(sysdate,DDD 当年第几 , 1 月 1 日为 001,2月 1363 2002 年 1 2 月 2 9 日为第 363 天DD 当月第几天 Select to_char(sysdate,D 周内第几天 Select to_char(sysdate,DY 周内第几天缩写 Select to_char(sysdate,为星期天to_char(sysdate, ' SYEAR') from' Q' ) from dual ; 2 表示第二季度; 12 表示 12 月'RM' ) from du
10、al ; IV 表示 4 月to_char(sysdate, 'Month ') from dual ; May) from dual'WW') from dual ; 24 表示 2002年 6月 13日'W') from dual ; 2002 年 10月 1日为第 1周日为 032 Select to_char(sysdate, 'DDD') from dual ;'DD') from dual ; 04 10 月 4日为第 4天'D') from dual ; 5 2002 年 3月 14日
11、为星期一'DY') from dual ; SUN 2002 年 3月 24日HH或 HH12 12 进制小时数 Select to_char(sysdate, ' HH ) from dual ; 02 午夜 2 点过 8 分为 02HH24 24 小时制 Select to_char(sysdate,'HH24') from dual ; 14 下午 2点 08分为 14MI 分钟数(0 59) Select to_char(sysdate, ' MI' ) from dual ; 17 下午 4点 17 分 SS 秒数(0 59)
12、Select to_char(sysdate, ' SS ) from dual ; 22 11 点 3 分 22 秒 提示注意不要将 MM格式用于分钟(分钟应该使用 Ml)。 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(s
13、ysdate,-1),'yyyy-MM-dd') PreToday from dual;PRETODAY 2005-05-21 3. 上月首天firstDay fromSQL>select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') dual;FIRSTDAY 2005-05-01 4. 按照每周进行统计SQL> select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww')
14、;TO5。按照每月进行统计SQL> select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');TO25066。按照每季度进行统计SQL> select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');7。按照每年进行统计SQL> select to_char(sysdate,'yyyy') from dual group by to_char(
15、sysdate,'yyyy');TO_C20058. 要找到某月中所有周五的具体日期 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
16、9;) = '星期五 '03-05-0203-05-0903-05-1603-05-2303-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 n
17、ls_date_format='yyyy-mm-dd hh:mi:ss'会话已更改。SQL> set serverout onSQL> declare2 DateValue date;3 begin4 select sysdate into DateValue from dual;5 dbms_output.put_line('6 dbms_output.put_line('7 dbms_output.put_line('8 dbms_output.put_line('源时间 :'|to_char(DateValue);天 :
18、'|to_char(DateValue-1);天 1 小时 :'|to_char(DateValue-1-1/24);时 间 减 1源时间减源时间减源分:'|to_char(DateValue-1-1/24-1/(24*60);9 dbms_output.put_line(' 源 时 间 减 1 天秒:'|to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*60);10 end;11 /源时间 :2003-12-29 11:53:41天:2003-12-28 11:53:41天 1 小时 :2003-12-28 10:
19、53:41天 1 小时 1 分:2003-12-28 10:52:41 天 1 小时 1 分 1 秒:2003-12-28 10:52:40源时间减 源时间减 源时间减 源时间减PL/SQL 过程已成功完成。在 Oracle 中实现时间相加处理- 名称:- 功能:- 说明:- 日期:- 版本:- 作者:Add_Times返回d1与NewTime相加以后的结果,实现时间的相加 对于 NewTime中的日期不予考虑2004-12-071.0 Kevincreate or replace function Add_Times(d1 in date,NewTime in date) return da
20、te ishhnumber;number;number;hours number;dResult date;begin- 下面依次取出时、分、秒select to_number(to_char(NewTime,'HH24') into hh from dual;mmssselect to_number(to_char(NewTime,'MI') into mm from dual; select to_number(to_char(NewTime,'SS') into ss from dual;- 换算出NewTime中小时总和,在一天的百分几h
21、ours := (hh + (mm / 60) + (ss / 3600)/ 24;- 得出时间相加后的结果select d1 + hours into dResult from dual; return(dResult);end Add_Times;- 测试用例03:23:00','YYYY-MM-DD HH24:MI:SS')- select Add_Times(sysdate,to_date('2004-12-06 from dual在 Oracle9i 中计算时间差计算时间差是 Oracle DATA数据类型的一个常见问题。Oracle支持日期计算,你可
22、以创建诸如“日期 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
23、)-消逝的时间(以分钟为单位)显示时间差的默认模式是什么?为了找到这个问题的答案, 查询。让我们进行一个简单的 SQL*PlusSQL> select sysdate-(sysdate-3) from dual;SYSDATE-(SYSDATE-3)所以我们可以很容易的使用转换函 数来把它转换成小时或者分钟。然而,当分钟数不是一个整数时,我们就会遇到放置小数点 的问题。这里,我们看到了 Oracle 使用天来作为消逝时间的单位,Select(sysdate-(sysdate-3.111)*1440 fromdual;(SYSDATE-(SYSDATE-3.111)*14404479.83
24、333当然,我们可以用 ROUN函数(即取整函数)来解决这个问题,但是要记住我们必须首先把 DATE数据类型转换成 NUMBE数据类型。Selectround(to_number(sysdate-(sysdate-3.111)*1440) fromdual;ROUND(TO_NUMBER(SYSDATE-(SYSDATE-3.111)*1440)4480我们可以用这些函数把一个消逝时间近似转换成分钟并把这个值写入Oracle 表格中。在这个例子里,我们有一个离线( logoff )系统级触发机制来计算已经开始的会话时间并把它放入 一个 Oracle STATS PACK USER_LO(扩展表
25、格之中。Updateperfstat.stats$user_logsetelapsed_minutes = round(to_number(logoff_time-logon_time)*1440) whereuser = user_id andelapsed_minutes is NULL;查出任一年月所含的工作日CREATE OR REPLACE FUNCTION Get_WorkingDays( ny IN VARCHAR2) RETURN INTEGER IS/* 函数名称: Get_WorkingDays 中文名称:求某一年月中共有多少工作日 作者姓名 : XINGPING编写时间
26、: 2004-05-22输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405返 回 值:整型值,包含的工作日数目。算法描述:1). 列举出参数给出的年月中的每一天。 这里使用了一个表 (ljrq 是我的库中的一张表。 这个表可以是有权访问的、 记录条数至少为 31 的任意一张表或视图) 来构造出某年月的每一 天。2).用这些日期和一个已知星期几的日期相减 (2001-12-30 是星期天 ),所得的差再对 7求模。如果所求年月在 2001-12-30 以前, 那么所得的差既是负数, 求模后所得值范围为大于 -6, 小于 0,如-1 表示星期六 ,故先将求模的结果加 7,再
27、求 7 的模.3).过滤掉结果集中值为 0 和 6 的元素,然后求 count, 所得即为工作日数目。*/Result INTEGER;BEGINSELECT COUNT(*) INTO ResultFROM (SELECT MOD(MOD(q.rq-to_date('2001-12-30','yyyy-mm-dd'),7),7) weekdayFROM ( SELECT to_date(ny|t.dd,'yyyymmdd') rqFROM (SELECT substr(100+ROWNUM,2,2) ddFROM ljrq z WHERE Ro
28、wnum<=31) tWHERE to_date(ny|t.dd,'yyyymmdd')BETWEEN to_date(ny,'yyyymm')AND last_day(to_date(ny,'yyyymm')q) aWHERE a.weekday NOT IN(0,6);RETURN Result;END Get_WorkingDays;还有一个版本CREATE OR REPLACE FUNCTION Get_WorkingDays( ny IN VARCHAR2) RETURN INTEGER IS/* 函数名称: Get_Workin
29、gDays 中文名称:求某一年月中共有多少工作日 作者姓名 : XINGPING编写时间 : 2004-05-23输入参数:NY:所求包含工作日数的年月,格式为 yyyymm,如200405 返 回 值:整型值,包含的工作日数目。算法描述: 使用 Last_day 函数计算出参数所给年月共包含多少天, 根据这个值来构造一个循 环。在这个循环中先求这个月的每一天与一个已知是星期天的日期 (2001-12-30 是星期天 ) 的 差,所得的差再对 7 求模。如果所求日期在 2001-12-30 以前,那么所得的差既是负数, 求模 后所得值范围为大于 -6, 小于 0,如-1 表示星期六 ,故先将求模的结果加 7,再求 7 的模. 如 过所得值不等于 0 和 6(即不是星期六和星期天) ,则算一个工作日。所给年月的天数某天距 2001-12-30 所差的天数*/ Result INTEGER := 0; myts INTEGER; - s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村养殖项目资源合作协议
- 特许经营加盟合作协议
- 通信网络设备供应协议
- 2025版桉树林木砍伐与林业产业结构调整承包合同
- 二零二五年度班轮货物运输集装箱租赁合同
- 二零二五年度搬家服务及特殊物品搬运合同
- 2025年农业可持续发展战略与政策建议报告
- 2025版绿色建筑节能材料采购与安装工程合同
- 农贸市场管理与服务合同
- 二零二五版出国留学考试辅导培训服务协议
- 小学安全工作台帐范本
- 纤维绳索 有关物理和机械性能的测定
- 碳中和技术概论全套教学课件
- 广西保险销售从业人员销售资质分级测试题库(含答案)
- 【人教版】八年级化学上册期末测试卷(含答案)
- 基础护理学第七版题附有答案
- 2024中汽中心校园招聘笔试参考题库含答案解析
- 监理业务手册范本
- 精神活性物质所致精神障碍病人的护理查房
- 消防工程消防器材供应方案
- 化工反应工程课模设计
评论
0/150
提交评论