问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

高手进!如何把Sql里面的datediff()方法,在Oracle里面如何替换使用啊?

发布网友 发布时间:2022-04-10 01:05

我来回答

2个回答

热心网友 时间:2022-04-10 02:34

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 al';
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 al' ;
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 al ';
end if;
dbms_output.put_line(sql_1);
EXECUTE IMMEDIATE sql_1 into v_result ;
return (v_result);
end;
--先执行以上函数,这样就在Oracle自己写了一个该函数;
使用时候可以这样:
select datediff('week','2012-09-01','2012-08-01','round') from al ;
--说明'week'表示周,'month'表示月,'day'表示天
--中间传俩日期
--第四个参数:周或月四舍五入用‘round’ ,向上取整用‘ceil’ 向下取整用‘floor’

热心网友 时间:2022-04-10 03:52

首先在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;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
硅胶与液态硅胶手机壳的区别 什么样的过敏会传染 过敏的原理是什么?为什么有的人过敏,有的人不过敏?谢谢! 过敏为什么会痒 评审报告需要注意什么 财政评审流程及注意事项 高效项目评审的6大注意事项 银行双录 什么意思 什么是银行双录 在异地哪些可公证 支付宝实名认证怎样进行关联? 云南银币的铸币大事记 光绪银元造省南云的多少钱—枚 清末民初的哪些老银元是由云南银元局铸造的 手机上可以操作支付宝关联认证吗? 中华民国三十八年贰角银币云南省造多少钱一个 中华*廿一年,云南省造,库平三钱六分,银元多少钱一枚?请各位有经验者帮忙鉴定下真假? 周氏藕粉生产日期在哪里 云南省造银元! 中华*廿一年,云南省造,库平三钱六分,这样的银元多少钱一枚?还请各位有经验者帮忙鉴定下真假? 真品中华民国甘一年双旗币云南省造二角银币值多少钱? 云南银币的云南银币一览 这个银元是真的吗?值多少钱 请问这枚云南省造光绪元宝七钱二分是真的吗?第二张图片是简单清理了一下上面的污垢。 哪个软件可以播放AMV的视频? 最值得推荐的视频播放软件是什么? 企业要有很多人,上海地区哪家人力外包公司比较靠谱? 上海有没有比较专业的社交电商外包公司? 湖南衡阳地区的联通宽带好用么 。?我前天装的,用过的告诉我下 谢谢。 长城宽带100m怎么样?有装过的吗?我是湖南衡阳的。 刚贴了个手机钢化膜 但是边缘有气泡不粘合 要怎么办啊才能没边缘气泡 求解 (能不 手机钢化膜边缘有很多小气泡,我看到有人说用卡片刮出来,可是我一刮 刚刚贴好的钢化膜发现手机边缘有气泡,那这个气泡对手机有危害吗? 关于SQLdatediff函数的疑问 怎么样在excel一个方框填很多数字 Excel 在小方框里怎么输入数子 怎样在excel中的小方格中输入数字 是黑色的血是褐色,量少怎么办 词人晏殊长生乐体现了什么样的情感? 长生乐抒发了作者怎么的感情? 《将门痞妻:夫君轻点撩》txt下载在线阅读全文,求百度网盘云资源 月经可能是黑褐色血吗 邕剧的代表剧目 这次来例假是少量黑褐色的血 流了2天黑褐色血然后就没有了 阴道流黑褐色的血是怎么回事?? 阴道里流出黑褐色分泌物,是血吗 词牌名有( ), ( ), ( ) 清平乐的“乐”,念哪个音 清平乐中的“乐"到底读什么音