具体操作步骤如下:
成都创新互联公司专注于三水网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供三水营销型网站建设,三水网站制作、三水网页设计、三水网站官网定制、成都微信小程序服务,打造三水网络公司原创品牌,更为您提供三水网站排名全网营销落地服务。
1、首先,打开sql,连接到oracle数据库,使用sql语句创建测试表,如下图所示,然后进入下一步。
2、其次,使用sql语句将3行测试数据插入上一步创建的测试表中。使用当前系统时间插入日期字段,如下图所示,然后进入下一步。
3、接着,完成上述步骤后,单击左上角箭头所指“提交”按钮以将更改提交到数据库以保存,如下图所示,然后进入下一步。
4、然后,完成上述步骤后,查询刚刚插入的数据,如下图所示,然后进入下一步。
5、随后,修改第一行中“
Updatedate”字段的值。这时,直接拼接的日期格式的字符串已更新,并且Oracle无法执行,如下图所示,然后进入下一步。
6、接着,修改第一行中“
Updatedate”字段的值,将字符串的版本日期转换为日期类型的权重类型,然后稍后对其进行修改以进行更新,如下图所示,然后进入下一步。
7、最后,修改第一行中Updatedate字段的值,使用当前日期减去一年就可以了,如下图所示。这样,问题就解决了。
select (to_date(to_char(sysdate,'hh24mi'),'hh24mi') - to_date('1820','hh24mi'))*1440 from dual;
两个日期相减的结果,单位是天,因此将两个日期相减,然后乘以1440,得到的结果就是“分钟数”
延展阅读:
甲骨文股份有限公司(NASDAQ:ORCL,Oracle)是全球大型数据库软件公司。总部位于美国加州红木城的红木岸(Redwood Shores),现时首席执行官为公司创办人劳伦斯·埃里森(Lawrence J. Ellison)。
2016年11月6日,甲骨文公司(Oracle)股东同意以 93 亿美元的资金收购Netsuite公司,每股价格约为 109 美元。
Oracle WDP 全称为Oracle Workforce Development Program,是Oracle (甲骨文)公司专门面向学生、个人、在职人员等群体开设的职业发展力课程。Oracle的技术广泛应用于各行各业,其中电信、电力、金融、政府及大量制造业都需要Oracle技术人才,Oracle公司针对职业教育市场在全球推广的项目,其以低廉的成本给这部分人群提供Oracle技术培训,经过系统化的实训,让这部分人群能够迅速掌握Oracle最新的核心技术,并能胜任企业大型数据库管理、维护、开发工作。
vs_time := to_char(date'2007-1-1' + end_date - begin_date, 'hh24:mi:ss') ;
vs_time需要是一个varchar2类型。
我测试通过了,你try一下。
这个“date'2007-1-1'”,其实你使用任何一天都可以——因为不care日期只关心时分秒。
1、测试数据库Oracle10G。
2、工具PLSQL Developer。
3、测试语句。
select to_date('2010/10/10 10:10:10', 'YYYY/MM/DD HH24:MI:SS') -
to_date('2010/09/10 10:10:10', 'YYYY/MM/DD HH24:MI:SS') from dual
返回结果30
两个date 型可以直接相减,值的单位是天,如果不是date型 先用to_date()处理再相减。
得出年数 : round(减后的值/365)
得出剩余月数: round(mod(减后的值,365)/30)
创建一个日期比较的函数(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;