oracle sql 日期比较,oracle 日期 比较

  oracle sql 日期比较,oracle 日期 比较

  共三部分:

  第一部分:oracle sql日期比较:

  http://www。博客Java。net/forker/archive/2007/09/07/143467。html #帖子

  第二部分:甲骨文获取当前日期及日期格式

  http://blog.sina.com.cn/s/blog_6168ee920100l2ye.html

  第三部分:

  获取昨天:

  从双数中选择trunc(系统日期-1);

  检查一下:

  select to_char (trunc(SYSDATE-1), yyyy-mm-DD HH24:MI:SS )from dual;

  获取上个月第一天00:00:00:

  select add_months(trunc(sysdate, MON ),-1 from dual

  select add_months(trunc(sysdate, MON ),-13 from dual也可以

  获取上个月今天00:00:00:

  SELECT trunc(add_months(sysdate,-1))FROM dual

  获得本季度第一天

  从双数中选择TRUNC(添加月份(系统日期,0), Q )

  获得上季度第一天

  从双数中选择TRUNC(添加月份(系统日期,-3), Q )

  获得去年一月一日

  to _ char(add _ months(trunc(sysdate, Year ),-12), YYYY-MM-DD )

  在……和……之间前面的时间小后面的时间大

  截止日期( 20110105 , YYYYMMDD)-7此处-7代表天

  第四部分:

  神谕时间函数(转)http://www。。com/xd 502 djj/archive/2010/08/24/1807565。超文本标记语言

  第一部分:oracle sql日期比较:

  数据库日期比较:

  在今天之前:

  select * from up _ date where update to _ date( 2007-09-0700:00:00 , yyyy-mm-ddhh24:mi:ss )

  select * from up _ date其中update=to _ date( 2007-09-0700:00:00 , yyyy-mm-ddhh24:mi:ss )

  在今天之后:

  select * from up _ date where update to _ date( 2007-09-0700:00:00 , yyyy-mm-ddhh24:mi:ss )

  select * from up _ date其中update=to _ date( 2007-09-0700:00:00 , yyyy-mm-ddhh24:mi:ss )

  精确时间:

  select * from up _ date其中update=to _ date( 2007-09-0700:00:00 , yyyy-mm-ddhh24:mi:ss )

  在某段时间内:

  select * from up _ date where update between to _ date( 2007-07-0700:00:00 , yyyy-mm-ddhh24:mi:ss )和截止日期( 2007-09-0700:00:00 , yyyy-mm-ddhh24:mi:ss )

  select * from up _ date where update to _ date( 2007-09-0700:00:00 , yyyy-mm-ddhh24:mi:ss )和更新到日期( 2007-07-0700:00:00 , yyyy-mm-ddhh24:mi:ss )

  select * from up _ date其中update=to _ date( 2007-09-0700:00:00 , yyyy-mm-ddhh24:mi:ss )和update=to _ date( 2007-07-0700:00:00 , yyyy-mm-ddhh 24:mi:ss )格式化日期输出格式:

  to_char(w.sample_time, yyyy-mm-dd )

  第二部分:甲骨文获取当前日期及日期格式

  神谕获取当前日期及日期格式

  获取系统日期:系统日期()

  格式化日期:TO_CHAR(SYSDATE(), YY/月/日HH24:MI:SS)

  或TO_DATE(SYSDATE(), YY/月/日HH24:MI:SS)

  格式化数字:收件人号码

  注:收件人_字符把日期或数字转换为字符串

  TO_CHAR(数字,格式)

  TO_CHAR(薪水,$99999.99 )

  TO_CHAR(日期,格式)

  截止日期把字符串转换为数据库中的日期类型

  到目前为止(字符格式)

  收件人号码将字符串转换为数字

  收件人号码(字符,格式)

  返回系统日期,输出25-12月-09

  从双数中选择系统日期

  大音阶的第三音是分钟,输出2009-12-25 14:23:31

  select to_char(sysdate, yyyy-MM-DD HH24:mi:ss )from dual;

  毫米会显示月份,输出2009-12-25 14:12:31

  select to_char(sysdate, yyyy-MM-DD HH24:MM:ss )from dual;

  输出09-12-25 14:23:31

  select to_char(sysdate, yy-mm-dd hh24:mi:ss) from dual

  输出2009-12-25 14:23:31

  select to _ date( 2009-12-25 14:23:31 , yyyy-mm-dd,hh24:mi:ss) from dual

  而如果把上式写作:

  select to _ date( 2009-12-25 14:23:31 , yyyy-mm-dd,hh:mi:ss) from dual

  则会报错,因为小时倍硬是12进制,14为非法输入,不能匹配。

  输出$10,000,00 :

  select to_char(1000000, $99,999,99 )from dual;

  输出人民币10,000,00元:

  从双数中选择to_char(1000000, L99,999,99 );

  输出1000000.12 :

  select trunc(to _ number( 1000000.123 ),2)from dual;

  从双数中选择to _ number( 1000000.123 );

  转换的格式:

  表示年的:y表示年的最后一位、

  尤尼克斯表示年的最后2位、

  yyy表示年的最后3位、

  年份用四位数表示年

  表示月的:嗯用2位数字表示月、

  孟族人用简写形式,比如11月或者11月,

  月用全称,比如11月或者十一月

  表示天的:dd表示当月第几天、

  ddd表示当年第几天、

  镝当周第几天,简写,比如星期五或者星期五,

  星期几,全名,例如星期五或星期五

  小时:hh2位数代表十进制中的小时,

  HH24两位数代表24小时。

  分钟:mi 2位数字代表分钟

  秒:ss 2数字以十六进制表示秒。

  季度:Q一位数表示季度(1-4)

  此外,ww用于表示一年中的第几周,W用于表示一个月中的第几周。

  24小时制下的时间范围:00: 00-23: 59: 59

  2小时制下的时间范围:1: 00: 00-12: 59: 59

  数字格式:9代表一个数字。

  0强制显示0

  $放置一个$符号。

  我放了一个浮动的本地货币符号。显示小数点

  ,显示千位指示器。

  补充:

  从当前时间减去7分钟。

  select sysdate,sysdate -从dual间隔 7 分钟。

  当前时间减去7小时。

  从dual中选择sysdate-interval“7”小时;

  当前时间减去7天。

  从dual中选择sysdate-interval“7”天;

  当前时间减去七月的时间。

  从dual中选择sysdate,sysdate - interval 7 月。

  当前时间减去7年。

  从dual中选择sysdate,sysdate - interval 7 年。

  时间间隔乘以一个数字

  select sysdate,sysdate - 8*interval 7 小时from dual。

  含义:

  双重伪列

  Dual是Oracle中的一个实际表,任何用户都可以读取它。它通常用在没有目标表的select语句块中。

  不同的系统可能以不同的格式返回日期。

  返回当前连接的用户:从dual中选择用户;

  第四部分:

  oracle时间函数(transition)常用的时间格式在Oracle中是yyyy-mm-dd hh24:mi:ss,但在Java中有些区别是yyyy-MM-dd HH:mm:ss,这往往容易模糊。

  相信很多人都有过统计一些数据的经历。比如统计财务状况,可能需要每年、每季度、每月甚至每周分别统计。那如何在oracle中写sql语句呢?这时候甲骨文的日期功能会给我们很多帮助。

  常用日期函数

  1。系统日期当前日期和时间

  SQL Selectsysdatefromdual

  系统日期

  -

  一月至六月至五月

  2。这个月的最后一天

  SQL select last _ day(sysdate)from dual;

  最后一天

  -

  2005年6月30日

  3。Add_months(d,n)将当前日期d向后推n个月。

  用于在日期值中加上或减去月份。

  日期值:=添加月数(日期值,月数)

  SQL Selectadd_months(sysdate,2)fromdual。

  添加_月份

  -

  一月至八月至五月

  4。Months_between(f,s)日期f和s之间的月差

  SQL select months _ between(sysdate,to_date(2005-11-12 , yyyy-mm-dd))fromdual。

  MONTHS_BETWEEN(SYSDATE,TO_DATE(2005-11-12 , YYYY-MM-DD ))

  -

  -4.6966741

  5。下一天(d,星期几)

  返回由名为“星期几”的变量“d”指定的日期之后的第一个工作日的日期。参数“星期几”必须是星期几。

  SQL select next _ day(to _ date( 2005 06 20 , YYYYMMDD ),1)from dual;

  第二天(T

  -

  六月-六月-五月

  6。Current_date()返回当前会话时区中的当前日期。

  日期值:=当前日期

  SQL columnsessiontimezonefora15

  SQL selectsessiontimezone,current _ datefromdual

  SESSIONTIMEZONECURRENT_DA

  -

  2003年11月8日

  SQL altersessionsettime _ zone=-11:00 2/

  会话已更改。

  SQL selectsessiontimezone,current_timestampfromdual。

  SESSIONTIMEZONECURRENT _时间戳

  -

  -11月12日上午11点至下午11点

  7。Current_timestamp()返回当前会话时区中的当前日期,数据类型为timestampwithtimezone。

  SQL select current _ timestampfromdual;

  当前时间戳

  -

  20589年6月21日上午8时

  8。Dbzone()返回dbtimezone

  SQL selectdbtimezonefromdual

  DBTIME

  -

  -08:00

  9。Extract()查找日期或间隔值的字段值。

  日期值:=extract(日期字段来自[日期时间值间隔值])

  SQL select extract(monthfromsysdate)“this month”from dual;

  这个月

  -

  六

  SQL select extract(yearfromadd _ months(sysdate,36)) Years from dual;

  年

  -

  2008

  10。Localtimestamp()返回会话中的日期和时间。

  SQL selectlocaltimestampfromdual:

  本地时间戳(本地时间戳)

  -

  6月21日月-0510.18.15.855652上午

  常用日期数据格式(该段为摘抄)

  然后呢或尤尼克斯是吗或YYY版年的最后一位,两位或三位Selectto_char(sysdate, yyy )from double;002表示2002年

  锡耶纳或年复一年使公元前的年份前加一负号Selectto_char(sysdate, syear )from double;1112年表示公元前1112年

  问季度,1~3月为第一季度Selectto_char(sysdate, q )from double;2表示第二季度S7-1200可编程控制器

  嗯,嗯月份数Selectto_char(sysdate, mm )from double;12表示12月

  RM(消歧义)月份的罗马表示Selectto_char(sysdate, RM )from double;四、导言表示四月

  月份(月)用9个字符长度表示的月份名selected _ char(sysdate, month )from double:梅五月后跟6个空格表示5月

  WWE(消歧义)当年第几周Selectto_char(sysdate, ww )from double;24表示2002年6月13日为第24周

  w代表本月第几周Selectto_char(sysdate, w )from double;2002年10月一日为第一周

  DDD(数字量输入)当年第几,1月一日为001.2月一日为032 selected _ char(sysdate, DDD )from double;3632002年12月29日为第363天

  DD(消歧义)当月第几天Selectto_char(sysdate, DD )from double;0410月四日为第四天

  d。非政府组织周内第几天Selectto_char(sysdate, d )from double;52002年3月14日为星期一

  -好的周内第几天缩写Selectto_char(sysdate, dy )from double;2002年太阳年3月24日为星期天

  HH!你好或HH1212号进制小时数Selectto_char(sysdate, hh )from double;02午夜2点过8分为02

  HH2424号小时制Selectto_char(sysdate, hh24 )from double;14下午2点08分为14

  我吗分钟数(0 ~ 59)selected _ char(sysdate, mi )from double;17下午四点17分

  圣人是秒数(0 ~ 59)selected _ char(sysdate, ss )from double;2211点3分22秒

  提示注意不要将嗯,嗯格式用于分钟(分钟应该使用(我)。嗯,嗯是用于月份的格式,将它用于分钟也能工作,但结果是错误的。

  现在给出一些实践后的用法:

  一个。上月末天:

  SQL selected _ char(add _ months(last _ day(sysdate),-1), yyyy-MM-dd)LastDayfrom

  双重的;

  最后一天(负荷日)

  -

  2005年5月31日

  2个。上月今天

  SQL selected _ char(add _ months(sysdate,-1), yyyy-mm-DD )pretodyfromdual;

  今天之前先生

  -

  2005年5月21日

  3.上月首天

  SQL selected _ char(add _ months(last _ day(sysdate)1,-2), yyyy-mm-DD )第一天dayfromdual

  第一天

  -

  2005年5月一日

  4.按照每周进行统计

  SQL selectto_char(sysdate, ww )from dual group by to _ char(sysdate, ww );

  来了

  -

  25

  5个。按照每月进行统计

  SQL selected _ char(sysdate, mm )from dual group by to _ char(sysdate, mm );

  来了

  -

  06

  6个。按照每季度进行统计

  SQL selected _ char(sysdate, q )from dual group byto _ char(sysdate, q );

  相当于-ED

  -

  2

  七个。按照每年进行统计

  SQL selectto_char(sysdate, yyyy )from dual group by to _ char(sysdate, yyyy );

  至_C

  -

  2005

  8.要找到某月中所有周五的具体日期

  selectto_char(t.d, YY-MM-DD)from(

  selecttruc(sysdate, MM) rownum-1asd

  来自数据库管理员对象-来自数据库管理员物件

  惠灵顿:(32)吨

  whereto_char(t.d, MM)=to_char(sysdate, MM) -找出当前月份的周五的日期

  圆框(to_char(t.d。天)=”星期五我不知道

  -

  02年5月3日

  09年5月3日

  2005年5月3日至16日

  2005年5月3日至23日

  2005年5月3日至30日

  如果把whereto_char(t.d, MM)=to_char(sysdate, MM ).改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。

  9 .甲骨文中时间运算

  内容如下:

  1、甲骨文支持对日期进行运算

  2 ._日期运算时是以天为单位进行的

  { 1 }当需要以分秒等更小的单位算值时,按时间进制进行转换即可

  4 ."进行时间进制转换时注意加括号,否则会出问题

  SQL age会话set nls _ date _ format= yyyy-mm-ddhh:mi:ss ;

  会话已更改。

  SQL setserverouton

  SQL声明-SQL宣告

  2日期值日期

  3开始

  4 selectsysfiletodatevaluefromdual;

  5dbms_output.put_line(源时间* to _ char(日期值));

  6dbms_output.put_line(源时间减一天* to _ char(日期值-1));

  7dbms_output.put_line(源时间减一天一小时* to _ char(日期值-1-1/24));

  8dbms_output.put_line(源时间减一天一小时一分* to _ char(日期值-1-1/24-1/(24 * 60));

  9dbms_output.put_line(源时间减去一天一小时一分一秒: to _ char(datevalue-1-1/24-1/(24 * 60)-1/(24 * 60 * 60)));

  10end

  11/

  资料来源:2003年12月-2011年:53: 41

  源时间减少1天:2003年12月-2811: 53: 41

  源时间减少1天1小时:2003年12月-2810: 53: 41

  源时间减去1天1小时1分钟:2003-12-2810:52:41

  源时间减少1天1小时1分1秒:2003年12月-2810: 52: 40

  PL/SQL进程已成功完成。

  Oracle中时间添加处理的实现

  -名称:添加次数

  -函数:返回d1和NewTime相加后的结果,实现时间的相加。

  -注意:不考虑NewTime中的日期。

  -日期:2004年12月7日

  -版本:1.0

  -作者:凯文

  createorreplacefunctionAdd _ Times(D1 in date,NewTimeindate)returndate

  存在

  hhnumber

  mmnumber

  ssnumber

  小时数;

  dResultdate

  开始

  -在下面依次取出小时、分钟和秒。

  select to _ number(to _ char(new time, HH24 ))intohhfromdual;

  select to _ number(to _ char(new time, MI ))intommfromdual;

  select to _ number(to _ char(new time, SS ))intossfromdual;

  -将小时数转换为新时间,它占一天的百分比是多少?

  小时数:=(hh(mm/60)(ss/3600))/24;

  -加时间后得到结果。

  选择hoursintodResultfromdual

  返回(d result);

  endAdd _ Times

  -测试案例

  - selectAdd_Times(sysdate,to_date(2004-12-0603:23:00 , YYYY-MM-ddhh 24:MI:SS ))from dual

  在Oracle9i中计算时差

  计算时差是OracleDATA数据类型的常见问题。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;

  系统日期-(系统日期-3)

  -

  三

  在这里,我们看到Oracle使用天数作为运行时间的单位,因此我们可以很容易地使用转换函数将其转换为小时或分钟。但是当分钟数不是整数时,我们会遇到小数点的放置问题。

  挑选

  (系统日期-(系统日期-3.111))*1440

  从

  对偶;

  (系统日期-(系统日期-3.111))*1440

  -

  4479.83333

  当然,我们可以使用ROUND函数(也就是rounding函数)来解决这个问题,但是要记住,我们必须首先将DATE数据类型转换为NUMBER数据类型。

  挑选

  round(to _ number(sysdate-(sysdate-3.111))* 1440)

  从

  对偶;

  ROUND(TO _ NUMBER(SYSDATE-(SYSDATE-3.111))* 1440)

  -

  4480

  我们可以使用这些函数将经过的时间近似转换成时钟,并将这个值写入Oracle表中。在这个例子中,我们有一个离线(注销)系统级触发机制来计算启动的会话时间,并将其放在一个OracleSTATSPACKUSER_LOG扩展表中。

  更新

  perfstat.stats$user_log

  设置

  已用分钟数=

  round(收件人号码(注销时间-登录时间)*1440)

  在哪里

  用户=用户标识

  和

  elapsed _ minutesisNULL

  找出任何一年中包含的工作日。

  CREATEORREPLACEFUNCTIONGet _ working days(

  nyINVARCHAR2

  )返回整数

  /* -

  函数名:Get_WorkingDays

  英文名:某月有几个工作日?

  作者:邢平

  编制时间:2004年5月22日

  输入:NY:包含工作日数的年和月。格式为yyyymm,如200405。

  返回值:整数值,包括工作天数。

  算法描述:

  1).列出参数给定的年份和月份中的每一天。这里用了一个表(ljrq是我库中的一个表。该表可以是任何具有access和至少31条记录的表或视图)。

  2).从已知的一周中的某一天减去这些日期(2001年12月30日是星期天),然后取模7。如果日期在2001年12月30日之前,则差值为负数,模块计算后得到的值的范围大于-6小于0。比如-1表示星期六,那么在模计算的结果上加7,然后计算7的模。

  3).筛选出结果集中值为0和6的元素,然后计算计数。结果就是工作天数。

  - */

  结果整数;

  开始

  选择计数(*)进入结果

  FROM(select MOD(MOD(q . rq-to _ date( 2001-12-30 , yyyy-mm-dd ),7),7)工作日

  FROM(SELECTto_date(nyt.dd, yyyymmdd)rq

  FROM(SELECTsubstr(100 ROWNUM,2,2)dd

  FROMljrqzWHERERownum=31

  )t

  WHEREto_date(nyt.dd, yyyymmdd )

  BETWEENto_date(纽约, yyyymm )

  和最后一天(截止日期(ny, yyyymm ))

  )问

  )a

  where . weekdaynotin(0,6);

  返回结果;

  ENDGet _ WorkingDays

  ______________________________________

  还有一个版本。

  CREATEORREPLACEFUNCTIONGet _ working days(

  nyINVARCHAR2

  )返回整数

  /* -

  函数名:Get_WorkingDays

  英文名:某月有几个工作日?

  作者:邢平

  编制时间:2004年5月23日

  输入:NY:包含工作日数的年和月。格式为yyyymm,如200405。

  返回值:整数值,包括工作天数。

  算法说明:使用Last_day函数计算参数给定的年和月包含多少天,根据这个值构造一个循环。在这个循环中,首先找出这个月的每一天与星期天(2001年12月30日,星期日)之间的差异,然后取模7。如果请求的日期在2001年12月30日之前,则差值为负,模块计算后获得的值的范围大于-6且小于0。比如-1表示星期六,那么先把7加到模计算的结果上,再计算7的模。如果得到的值不等于0和6(即不是周六周日),则计为工作日。

  - */

  结果整数:=0;

  mytsINTEGER-给定年份和月份中的天数。

  sctsINTEGER-从某一天到2001年12月30日之间的天数。

  rqDATE

  djtINTEGER:=1;-

  开始

  myts:=to _ char(last _ day(to _ date(ny, yyyymm ), DD );

  环

  rq:=TO_date(nysubstr(100 djt,2), yyyymmdd );

  scts:=rq-to_date(2001-12-30 , yyyy-mm-DD );

  IFMOD(MOD(scts,7) 7,7)NOTIN(0,6)THEN

  结果:=结果1;

  ENDIF

  djt:=djt 1;

  EXITWHENdjt myts

  结束循环;

  返回结果;

  ENDGet _ WorkingDays

  以上两个版本的比较

  在第一个版本中,一条SQL语句就可以得到结果,不需要编程就可以达到目的。但是,您需要使用任何具有access和至少31条记录的表或视图。

  第二个版本需要编程,但不需要表或视图。

  两个版本都还有待改进,就是没有考虑节日,比如五一,十一,元旦,春节。这些节假日要维护在一个表中,然后通过查表就可以把这些节假日去掉。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: