datediff oracle,oracle中DateDiff()的用法
datediff oracle,oracle中DateDiff()的用法详细介绍
本文目录一览: oracle中DateDiff()的用法
1、datediff()的使用格式是:DATEDIFF(datepart,startdate,enddate)。其中startdate(开始日期)和enddate(结束日期)参数是合法的日期表达式。
2、selectdatediff(day,2006-05-2610:11,2006-05-2511:11)结果为1天,只判断日期中的天数,是不根据时间来判断的。
3、使用Months_between(f,s)日期f和s间相差月数,但结果有小数。你要整数,可以进行截取。
4、计算年龄其实就是计算当前日期和出生日期之间的差值SQL计算时间差值使用的函数是:Datediff()定义和用法:DATEDIFF()函数返回两个日期之间的天数。
oracle中DateDiff()的用法
1、首先在oracle中没有datediff()函,可以利用日期间的加减运算方法在oracle中实现该函数的功能。
2、正常工作需要两个参数条件区域和计数条件。要计算很简单,输入函数公式。
3、函数的作用是对数据求和,而F对它进行了引伸和拓展,比如计算金额在1元以上的数据总和、按照人员或产品分类计算数据总和等等。它有3个参数,分别是条件区域、判断条件、实际的求和区域。
4、逻辑高手函数是一个条件函数,它可以通过设置的条件进行逻辑判断。是函数的判断条件,条件成立的操作和条件不成立的操作。
5、数据的分类汇总是最常见的应用。分类汇总的方法很多,包括使用函数和公式。设置的条件可看作是分类的依据。
6、重复数据的筛选问题常常让我们感到非常棘手。函数除了可以实现分类计数汇总外,它和函数配合,还可以实现对重复数据的标识与筛选,从而将1列中的重复数据删除。
datediff函数怎么用啊?
1、定义和用法DATEDIFF()函数返回两个日期之间的天数。语法DATEDIFF(datepart,startdate,enddate)startdate和enddate参数是合法的日期表达式。
2、datediff(h,a,b),指b-a的小时差,根据参数h值不同,可计算天、月、小时、分、秒等。
3、首先在oracle中没有datediff()函,可以利用日期间的加减运算方法在oracle中实现该函数的功能。正常工作需要两个参数条件区域和计数条件。要计算很简单,输入函数公式。
4、sql语句中计算两个日期的差值用datediff函数。工具:sqlserver2008R2步骤:计算2009-06-23与2009-06-17之间的天数。
5、dimTempDayTempDay=Datediff(D,StartDay,EndDay)---返回两日期差多少天DateDiff函数用于计算两日期时间的差值,计算方法是EndDay-StartDay。
oracle中DateDiff()的用法
首先在oracle中没有datediff()函数
可以用以下方法在oracle中实现该函数的功能:
1.利用日期间的加减运算
天:
ROUND(TO_NUMBER(END_DATE - START_DATE))
小时:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)
分钟:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)
秒:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)
毫秒:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 60)
2.写函数
Create Or Replace Function CDate(Datechar In Varchar2) Return Date Is
ReallyDo Date;
Begin
Select to_date(to_char(to_date(to_char(Datechar), 'YYYY-MM-DD HH24:MI:SS'),
'YYYY-MM-DD'),
'YYYY-MM-DD')
Into ReallyDo
From Dual;
Return(ReallyDo);
End CDate;
Create Or Replace Function CDateTime(Datechar In Varchar2) Return Date Is
ReallyDo Date;
Begin
Select to_date(to_char(to_date(to_char(Datechar), 'YYYY-MM-DD HH24:MI:SS'),
'YYYY-MM-DD HH24:MI:SS'),
'YYYY-MM-DD HH24:MI:SS')
Into ReallyDo
From Dual;
Return(ReallyDo);
End CDateTime;
Create Or Replace Function Datediff
(
Datepart In Varchar2,
StartDate In Varchar2,
EndDate In Varchar2
) Return Number Is
ReallyDo Numeric;
Begin
Select Case Upper(Datepart)
When 'YYYY' Then
Trunc(Extract(Year From CDate(EndDate)) -
Extract(Year From CDate(StartDate)))
When 'M' Then
Datediff('YYYY', StartDate, EndDate) * 12 +
(Extract(Month From CDate(EndDate)) -
Extract(Month From CDate(StartDate)))
When 'D' Then
Trunc(CDate(EndDate) - CDate(StartDate))
When 'H' Then
Datediff('D', StartDate, EndDate) * 24 +
(to_Number(to_char(CDateTime(EndDate), 'HH24')) -
to_Number(to_char(CDateTime(StartDate), 'HH24')))
When 'N' Then
Datediff('D', StartDate, EndDate) * 24 * 60 +
(to_Number(to_char(CDateTime(EndDate), 'MI')) -
to_Number(to_char(CDateTime(StartDate), 'MI')))
When 'S' Then
Datediff('D', StartDate, EndDate) * 24 * 60 * 60 +
(to_Number(to_char(CDateTime(EndDate), 'SS')) -
to_Number(to_char(CDateTime(StartDate), 'SS')))
Else
-29252888
End
Into ReallyDo
From Dual;
Return(ReallyDo);
End Datediff;
oracle 时间相减函数
你是要计算小时,周六日需要去除吗?
呵呵,看来是个打卡机。
---创建环境
create table aaaa (e date ,f date);
insert into aaaa (E, F) values (to_date('14-12-2010 14:29:42', 'dd-mm-yyyy hh24:mi:ss'), to_date('15-12-2010 19:17:42', 'dd-mm-yyyy hh24:mi:ss'));
---查询结果:
WOSON @ test_slaver_188 > select e,f,1440*(((trunc(e)+16.5/24)-e)+(f-(trunc(f)+8/24))) "e和f之间相差的上班时间(分钟)" from aaaa;
E F e和f之间相差的上班时间(分钟)
------------------- ------------------- ----------------------------
2010-12-14 14:29:42 2010-12-15 19:17:42 798
已选择 1 行。
已用时间: 00: 00: 00.01
WOSON @ test_slaver_188 >
用一个函数可以解决,就是不知楼主的具体要求。
创建一个日期比较的函数(datediff,网上找的),然后通过该函数返回天数×8.5 就是总共的小时数了,如果要精确点的话,就把首尾天数中的时间差刨了即可。
create or replace function datediff
(p_Component varchar2 ,
p_Subtranhend date,
p_Minuend date)
RETURN NUMBER
IS
/*************************************************************************/
/* 功 能:返回两个日期之间的天、周、月、年等数量。 */
/* 入参说明: p_Component 时间元件,如年月日季度等等 */
/* p_Subtrahend 减数时间 */
/* p_Minuend 被减数时间 */
/*************************************************************************/
v_ReturnValue number ; -- 结果数值
v_Component varchar2(10); --日期组件中间转换形式,截取空格并且转为大写
v_YearNum1 number; --减数年份数
v_YearNum2 number; --被减数年份数
v_MonthNum1 number; --减数月份数
v_MonthNum2 number; --被减数月份数
v_HourNum1 number; --减数时数
v_HourNum2 number; --被减数时数
v_MinuteNum1 number; --减数分钟数
v_MinuteNum2 number; --被减数分钟数
v_SecondNum1 number; --减数秒钟数
v_SecondNum2 number; --减数秒钟数
v_QuarterValue1 number; --减数季度数
v_QuarterValue2 number; --被减数季度数
v_WeekNum1 number; --减数与标准时间周差
v_WeekNum2 number; --被减数与标准时间周差
BEGIN
v_Component := upper(ltrim(rtrim(p_Component)));
if v_Component in ('Y','YY','YEAR','YYYY') then --年情况
v_YearNum1 := to_number(to_char(p_Subtranhend,'YYYY'));
v_YearNum2 := to_number(to_char(p_Minuend,'YYYY')) ;
v_ReturnValue := v_YearNum2 - v_YearNum1;
elsif v_Component in ('M', 'MM','MONTH', 'MON') then --月情况
--请注意,这个部分与oracle内置日期函数MONTH_BETWEEN()不同,忽略了日因素
--而后者的两个日期如都是所在月的最后一天,才返回整数,否则,返回分数
--而且这个分数是以31天作为一个月进行计算的结果
v_YearNum1 := to_number(to_char(p_Subtranhend,'YYYY'));
v_YearNum2 := to_number(to_char(p_Minuend,'YYYY')) ;
v_MonthNum1 := to_number(to_char(p_Subtranhend,'MM'));
v_MonthNum2 := to_number(to_char(p_Minuend,'MM'));
v_ReturnValue := (v_YearNum2 - v_YearNum1)*12 + (v_MonthNum2 - v_MonthNum1);
elsif v_Component in ( 'D', 'DD', 'DAY') then --日情况
--这里与两个日期直接相减的oracle日期算术也不同,只返回整数天数;
--而后者可以返回一天的几分之几(以小数形式表达)
v_ReturnValue := to_date(to_char(p_Minuend,'yyyy-mm-dd'),'YYYY-MM-DD')
- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'),'YYYY-MM-DD');
elsif v_Component in ('H', 'HH', 'HOUR') then --时情况
--第一步:求出天数
v_ReturnValue := (to_date(to_char(p_Minuend,'yyyy-mm-dd'),'YYYY-MM-DD')
- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'), 'YYYY-MM-DD'));
--第二步:求出时数
v_HourNum1 := to_number(to_char(p_Subtranhend,'HH24'));
v_HourNum2 := to_number(to_char(p_Minuend,'HH24'));
v_ReturnValue := v_ReturnValue*24 + (v_HourNum2 - v_HourNum1);
elsif v_Component in ('MI','MINUTE') then --分情况
--第一步:求出天数
v_ReturnValue := (to_date(to_char(p_Minuend,'yyyy-mm-dd'),'YYYY-MM-DD')
- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'), 'YYYY-MM-DD'));
--第二步:求出时数
v_HourNum1 := to_number(to_char(p_Subtranhend,'HH24'));
v_HourNum2 := to_number(to_char(p_Minuend,'HH24'));
v_ReturnValue := v_ReturnValue*24 + (v_HourNum2 - v_HourNum1);
--第三步:求出分钟数
v_MinuteNum1 := to_number(to_char(p_Subtranhend,'MI'));
v_MinuteNum2 := to_number(to_char(p_Minuend,'MI'));
v_ReturnValue := v_ReturnValue*60 + (v_MinuteNum2 - v_MinuteNum1);
elsif v_Component in('S', 'SS', 'SECOND') then --秒情况
--第一步:求出天数
v_ReturnValue := (to_date(to_char(p_Minuend,'yyyy-mm-dd'),'YYYY-MM-DD')
- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'),
'YYYY-MM-DD'));
--第二步:求出时数
v_HourNum1 := to_number(to_char(p_Subtranhend,'HH24'));
v_HourNum2 := to_number(to_char(p_Minuend,'HH24'));
v_ReturnValue := v_ReturnValue*24 + (v_HourNum2 - v_HourNum1);
--第三步:求出分钟数
v_MinuteNum1 := to_number(to_char(p_Subtranhend,'MI'));
v_MinuteNum2 := to_number(to_char(p_Minuend,'MI'));
v_ReturnValue := v_ReturnValue*60 + (v_MinuteNum2 - v_MinuteNum1);
--第四步:求出秒钟数
v_SecondNum1 := to_number(to_char(p_Subtranhend,'SS'));
v_SecondNum2 := to_number(to_char(p_Minuend,'SS'));
v_ReturnValue := v_ReturnValue*60 + (v_SecondNum2 - v_SecondNum1);
elsif v_Component in ('Q','QQ','QUARTER') then --季度情况
v_YearNum1 := to_number(to_char(p_Subtranhend,'YYYY'));
v_YearNum2 := to_number(to_char(p_Minuend,'YYYY')) ;
v_QuarterValue1 := to_number(to_char(p_Subtranhend,'Q'));
v_QuarterValue2 := to_number(to_char(p_Minuend,'Q'));
v_ReturnValue := (v_YearNum2 - v_YearNum1)*4 + (v_QuarterValue2 - v_QuarterValue1);
elsif v_Component in ('W','WW','WK','WEEK') then --周情况
--一周的起始日期应当为星期日
--关于周差的计算,尝试采用中间日期的方法
--经查,‘1-1-2’即公元一年1月2日为周日,我们就可以用两个时间分别与其相减求周差
--两个结果再相减,即可得到正确的数值
v_WeekNum1 := floor( (to_date(to_char(p_Subtranhend,'YYYY-MM-DD'),'YYYY-MM-DD') -
to_date('1-1-2','YYYY-MM-DD'))/7);
v_WeekNum2 := floor( (to_date(to_char(p_Minuend,'YYYY-MM-DD'),'YYYY-MM-DD') -
to_date('1-1-2','YYYY-MM-DD'))/7);
v_ReturnValue := v_WeekNum2 - v_WeekNum1;
else
v_ReturnValue := -88888;
end if;
RETURN v_ReturnValue;
EXCEPTION
WHEN OTHERS THEN
RETURN -99999;--例外处理
END datediff;
datediff函数的使用方法是如何的?
1、datediff函数语法用法:
表达式DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]])
允许数据类型: timeinterval 表示相隔时间的类型,代码为:年份 yy、yyyy 季度 qq、q;月份 mm、m;每年的某一日 dy、y;日期 dd、d;星期 wk、ww;工作日 dw;小时 hh;分钟 mi、n;秒 ss、s;毫秒 ms。
2、datediff函数用法示例:
<%
fromDate = #9/9/00#
toDate = #1/1/2000#
response.write "There are " & _
DateDiff("d",fromDate,toDate) & _
" days to millenium from 9/9/00."
%>
返回结果: 从9/9/00 到2000年还有 150 天。
扩展资料:
datediff函数应用范围:
1,该函数在mysql中可用
2,该函数在sybase中可用
3,该函数在在oracle中不可用!
------------------------------------------------------------
select datediff(''d'','2003-01-01','2003-01-02')返回的是1;
select datediff(''d'','2003-01-02','2003-01-01')返回的是-1;
可见datediff返回的是date2和date1之间在给定参数timeinterval下的差值。
注:
在sql2000下测试 "h"时是错误的,应该是 hh,例如:
select datediff(hh,'2003-01-01','2003-01-02') 返回的是24。
参考资料:百度百科-DateDiff()
用法:DATEDIFF() 函数返回两个日期之间的时间,例如:
1、使用如下 SELECT 语句:
SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate
结果:
2、使用如下 SELECT 语句:
SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate
结果:
扩展资料:语法:DateDiff(interval, date1, date2 [,firstdayofweek][, firstweekofyear]])
DateDiff 函数的语法有以下参数:
interval 必选。字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔。有关数值,请参阅“设置”部分。
date1, date2 必选。日期表达式。用于计算的两个日期。
firstdayofweek 可选。指定星期中第一天的常数。如果没有指定,则默认为星期日。有关数值,请参阅“设置”部分。
firstweekofyear 可选。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。有关数值,请参阅“设置”部分。
方法/步骤
1
简单介绍一下datediff()函数。
定义和用法
DATEDIFF() 函数返回两个日期之间的天数。
语法
DATEDIFF(datepart,startdate,enddate)
startdate 和 enddate 参数是合法的日期表达式。
datepart 参数可以是下列的值:
2
计算相差的天数:
select DATEDIFF(DAY,'2013-10-12 10:25:52.400','2013-10-19 00:25:52.400') as '时间差'
备注:更改日期后面的时间不影响相差天数的输出结果
3
计算相差的小时数:
select DATEDIFF(HOUR,'2013-10-12 10:25:52.400','2013-10-12 23:25:53.400') as '时间差'
备注:分钟的改变不能影响计算结果
使用方法如下:
1.datediff()的使用格式是:DATEDIFF(datepart,startdate,enddate)。其中startdate(开始日期) 和 enddate(结束日期) 参数是合法的日期表达式。
2.datediff()函数可以用于SELECT的查询操作,用于查询所给的两个日期之间间隔的天数。
3.datediff()函数查询时起始日期的位置不做要求,比如新日期可以作为startdate,旧日期可以作为enddate,这样得到的天数是以负数显示的。
扩展资料:
datediff()使用过程中需要注意的地方:
1.datediff() 函数计算指定的两个日期中第二个日期与第一个日期的时间差的日期部分。换句话说,它得 出两个日期之间的间隔。结果是等于 date2 - date1 的日期部分的带符号整数值。
2.如果datediff()函数中日期参数的数据类型是 smalldatetime,则结果的数据类型也是 smalldatetime。可以使用 DATEADD 向 smalldatetime 值添加秒或毫秒,但只有当 DATEADD 返回的结果日期的改变不小于 1 分钟时,这样做才有意义。
参考资料来源:百度百科-datediff()函数
oracle中功能等同sqlserver中的datediff的函数?
是天数的计算,
SQLServer中:
select
datediff(day,'2006-05-26
10:11','2006-05-25
11:11')
结果为1天,只判断日期中的天数,是不根据时间来判断的。但是转到ORACLE:
select
trunc((to_date('2006-05-26
10:11','YYYY-MM-DD
HH:MI')
-
to_date('2006-05-25
11:11','YYYY-MM-DD
HH:MI')))
as
datediff
from
dual
结果为0,只有把前面一个日期改成'2006-05-26
11:11'之后的时间才返回1天。
我要求是只根据天数来求值,看来要统一把比较的日期改到最小单位为天的日期,实际使用中是要把sysdate与结果集中字段计算的,该字段compdate是YYYY-MM-DD
HH:MI格式的varchar2类型,难道要我这么写:
select
trunc(to_date(to_char(sysdate,'YYYYMMDD'),'YYYYMMDD')
-
to_date(to_char(to_date(compdate,'YYYY-MM-DD
HH:MI'),'YYYYMMDD'),'YYYYMMDD'))
from
table1
感觉太烦了,有更好的办法吗?
-----------------------------
解决方法:
select
trunc(sysdate)
-
trunc(to_date('2006-05-28
10:20','YYYY-MM-DD
HH24:MI'))
from
dual
select
*
from
监控温度表
A
where
时间
between
'"
+
Str(dtStart.Value)
+
"'AND
'"
+
Str(dtEnd.Value)
+
"'
And
Not
Exists
(Select
时间
From
监控温度表
Where
DateDiff(mi,
时间,
A.时间)
<=
"
+
Str(text1.text)
+
")
order
by
id
try
select
*
from
监控温度表
A
where
时间
between
'"
+
Str(dtStart.Value)
+
"'AND
'"
+
Str(dtEnd.Value)
+
"'
And
Not
Exists
(Select
时间
From
监控温度表
Where
DateDiff(mi,
时间,
A.时间)
<=5
)
order
by
id
DATEDIFF怎么用oracle的函数替换掉
create
or
replace
function
datediff(type
in
varchar2,
startTime
in
varchar2,endTime
in
varchar2,v
in
varchar2)
return
number
as
v_result
number;
sql_1
varchar2(200);
begin
dbms_output.put_line('1');
if(type
=
'day')
then
sql_1
:=
'select
'||v||'(TO_NUMBER(to_date('''||startTime||''',''YYYY-MM-DD'')
-
to_date('''||endTime||''',''YYYY-MM-DD'')))
from
dual';
dbms_output.put_line('1');
elsif(type
=
'month')
then
sql_1
:=
'select
'||v||'(months_between(to_date('''||startTime||''',''YYYY-MM-DD'')
-
to_date('''||endTime||''',''YYYY-MM-DD'')))
from
dual'
;
dbms_output.put_line('1');
elsif(type
=
'week')
then
dbms_output.put_line('1');
sql_1
:=
'select
'||v||'(TO_NUMBER(to_date('''||startTime||''',''YYYY-MM-DD'')
-
to_date('''||endTime||''',''YYYY-MM-DD''))/7)
from
dual
';
end
if;
dbms_output.put_line(sql_1);
EXECUTE
IMMEDIATE
sql_1
into
v_result
;
return
(v_result);
end;
使用时候可以这样:
select
datediff('week','2012-09-01','2012-08-01','round')
from
dual
;
--说明'week'表示周,'month'表示月,'day'表示天
--中间传俩日期
--第四个参数:周或月四舍五入用‘round’
,向上取整用‘ceil’
向下取整用‘floor’
DATEDIFF怎么用oracle的函数替换掉
create or replace function datediff(type in varchar2, startTime in varchar2,endTime in varchar2,v in varchar2) return number as
v_result number;
sql_1 varchar2(200);
begin
dbms_output.put_line('1');
if(type = 'day') then
sql_1 := 'select '||v||'(TO_NUMBER(to_date('''||startTime||''',''YYYY-MM-DD'') - to_date('''||endTime||''',''YYYY-MM-DD''))) from dual';
dbms_output.put_line('1');
elsif(type = 'month') then
sql_1 := 'select '||v||'(months_between(to_date('''||startTime||''',''YYYY-MM-DD'') - to_date('''||endTime||''',''YYYY-MM-DD''))) from dual' ;
dbms_output.put_line('1');
elsif(type = 'week') then
dbms_output.put_line('1');
sql_1 := 'select '||v||'(TO_NUMBER(to_date('''||startTime||''',''YYYY-MM-DD'') - to_date('''||endTime||''',''YYYY-MM-DD''))/7) from dual ';
end if;
dbms_output.put_line(sql_1);
EXECUTE IMMEDIATE sql_1 into v_result ;
return (v_result);
end;
使用时候可以这样:
select datediff('week','2012-09-01','2012-08-01','round') from dual ;
--说明'week'表示周,'month'表示月,'day'表示天
--中间传俩日期
--第四个参数:周或月四舍五入用‘round’ ,向上取整用‘ceil’ 向下取整用‘floor’
oracle mysql timediff,datediff问题
datediff timediff 是mysql中的日期函数,Oracle 没有
在Oracle中求两个日期时间差,只要相减就可以了
select 表名.字段1-表名.字段2 from sp_表名
返回的结果是差异天数