C 的 time1(&t1), time2(t1, &dt)

本文介绍了两个C++函数:time1用于获取当前时间并转换为特定格式;time2用于计算两个时间点之间的差值。通过这两个函数,可以方便地进行时间相关计算。
cpp 代码
  1. // file: sj02.h   
  2.   
  3. void time1(int *t1);   
  4. void time2(int t1, double *dt);   
  5. // ----------------------------------------------   
  6.   
  7. void time1(int *t1)   
  8. {   
  9.     struct _timeb timebuffer;   
  10.     _ftime( &timebuffer );   
  11.   
  12.     *t1= timebuffer.time + 8L*60*60;   
  13.     (*t1)%= (1L*24*60*60);   
  14.     *t1= (*t1)*1000L + timebuffer.millitm;   
  15. }// end time1()   
  16. // ----------------------------------------------   
  17.   
  18. void time2(int t1, double *dt)   
  19. {   
  20.     // get t2   
  21.     int t2;   
  22.     time1(&t2);   
  23.     // ----------------------------------------------   
  24.   
  25.     *dt= (t2 - t1)/1000.0;   
  26.   
  27.     // dt must >= 0.0   
  28.     if ((*dt) < 0.0) {   
  29.         (*dt)+= 1.0*24.0*60.0*60.0;   
  30.     }   
  31. }// end time2()   
  32. // ----------------------------------------------   
CREATE OR REPLACE PROCEDURE P_SyncVoucharToOA AS v_updatetime date; v_quantity integer; v_init_time date; BEGIN v_init_time := to_date('2021-10-01', 'YYYY-MM-DD'); SELECT SYSDATE INTO v_updatetime FROM DUAL; SELECT COUNT(1) INTO v_quantity --FROM z_voucher_test t1 inner join z_period t2 on t1.fperiodid = t2.id FROM t_gl_voucher t1 inner join T_BD_Period t2 on t1.fperiodid = t2.fid WHERE (t1.FLASTUPDATETIME BETWEEN (select nvl(max(FACTIONTIME), v_init_time) from Z_SYNC_LOG where FACTIONFLAG = 'sync_fybx') AND v_updatetime) and (substr(t1.FDESCRIPTION, 1, 4) = 'FYBX' OR substr(t1.FDESCRIPTION, 1, 5) = 'NFYBX'); merge into uf_fybxalxx@ecology dt1 using (select cast(t2.fperiodnumber as varchar2(100)) || '#' || cast(t1.FNUMBER as varchar2(100)) as pzbh , case t1.FBIZSTATUS when 0 then '暂存' when 1 then '已提交' when 2 then '已作废' when 3 then '已审核' when 5 then '已过账' end as pzzt, t1.FLOCALDEBITAMOUNT as pzje, t1.FDESCRIPTION from t_gl_voucher t1 inner join T_BD_Period t2 on t1.fperiodid = t2.fid where (t1.FLASTUPDATETIME BETWEEN (select nvl(max(FACTIONTIME), v_init_time) from Z_SYNC_LOG where FACTIONFLAG = 'sync_fybx') AND v_updatetime) and (substr(t1.FDESCRIPTION, 1, 4) = 'FYBX' OR substr(t1.FDESCRIPTION, 1, 5) = 'NFYBX') And t1.FDESCRIPTION Not In ('FYBX20220228003','NFYBX20240319034','NFYBX20240321019')) dt2 on (dt1.djbh = dt2.FDESCRIPTION) when matched then update set dt1.pzbh = dt2.pzbh, dt1.pzje = dt2.pzje, dt1.pzzt = dt2.pzzt, dt1.gxsj = to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'); COMMIT; INSERT INTO Z_SYNC_LOG (UUID, FSOURCE, FTARGET, FDESCRIPTION, FQUANTITY, FACTIONTIME, FACTIONFLAG) VALUES ((select sys_guid() from dual), 'EAS.T_GL_VOUCHER', 'OA.UF_FYBXALXX', '向费用报销台账更新凭证编码,会计期间,凭证总金额,凭证状态。', v_quantity, v_updatetime, 'sync_fybx'); COMMIT; SELECT COUNT(1) INTO v_quantity FROM t_gl_voucher t1 inner join T_BD_Period t2 on t1.fperiodid = t2.fid WHERE (t1.FLASTUPDATETIME BETWEEN (select nvl(max(FACTIONTIME), v_init_time) from Z_SYNC_LOG where FACTIONFLAG = 'sync_clfbx') AND v_updatetime) and (substr(t1.FDESCRIPTION, 1, 4) = 'CLBX' OR substr(t1.FDESCRIPTION, 1, 5) = 'NCLBX'); merge into uf_clfbx@ecology dt1 using (select cast(t2.fperiodnumber as varchar2(100)) || '#' || cast(t1.FNUMBER as varchar2(100)) as pzbh , case t1.FBIZSTATUS when 0 then '暂存' when 1 then '已提交' when 2 then '已作废' when 3 then '已审核' when 5 then '已过账' end as pzzt, t1.FLOCALDEBITAMOUNT as pzje, t1.FDESCRIPTION from t_gl_voucher t1 inner join T_BD_Period t2 on t1.fperiodid = t2.fid where (t1.FLASTUPDATETIME BETWEEN (select nvl(max(FACTIONTIME), v_init_time) from Z_SYNC_LOG where FACTIONFLAG = 'sync_clfbx') AND v_updatetime) and (substr(t1.FDESCRIPTION, 1, 4) = 'CLBX' OR substr(t1.FDESCRIPTION, 1, 5) = 'NCLBX')) dt2 on (dt1.djbh = dt2.FDESCRIPTION) when matched then update set dt1.pzbh = dt2.pzbh, dt1.pzje = dt2.pzje, dt1.pzzt = dt2.pzzt, dt1.gxsj = to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'); COMMIT; INSERT INTO Z_SYNC_LOG (UUID, FSOURCE, FTARGET, FDESCRIPTION, FQUANTITY, FACTIONTIME, FACTIONFLAG) VALUES ((select sys_guid() from dual), 'EAS.T_GL_VOUCHER', 'OA.UF_CLFBX', '向差旅费报销台账更新凭证编码,会计期间,凭证总金额,凭证状态。', v_quantity, v_updatetime, 'sync_clfbx'); COMMIT; END;帮我解析下,这块的含义,以及优化方案
最新发布
08-06
select regexp_replace(substr(create_time,1,10),'-','') as dt --日期 -- 业务日期 ,staff_id -- 员工工号 ,prev_status -- 本次状态转换前客服状态 ,current_status currt_status -- 本次状态转换后客服状态 ,create_time as status_start_tm -- 状态开始时间 ,lead(create_time) over(partition by substr(create_time,1,10),staff_id order by cast(id as int)) as status_end_tm -- 根据时间和员工号分区对主键升序,把下一创建时间作为状态结束时间 from ods.im_api_im_staff_status_transition_history where dt = regexp_replace(date_sub(current_date,1),'-','') and regexp_replace(substr(create_time,1,10),'-','') = '${dt_1}' order by dt,staff_id ) as t -- group by t.dt,t.staff_id,t.currt_status ) as a group by staff_id ) as x1 left join (-- 坐席在线开始时间及结束时间 select t1.staff_id ,min(t1.create_time) create_time ,max(t1.end_time) end_time ,unix_timestamp(max(t1.end_time)) - unix_timestamp(min(t1.create_time)) dur ,concat_ws('\n',collect_list(concat(t1.create_time,'~',t1.end_time ))) as sign_dts from ( select t1.staff_id ,substr(create_time,1,19) create_time ,lead(substr(create_time,1,19),1,0) over (PARTITION by t1.staff_id order by t1.create_time) as end_time ,t1.prev_status from ods.im_api_im_staff_status_transition_history t1 where dt = regexp_replace(date_sub(current_date,1),'-','') and regexp_replace(substr(create_time,1,10),'-','') = '${dt_1}' and concat(prev_status,current_status) regexp '0' ) t1 where prev_status = '0' group by 1 ) as x2 on x1.staff_id=x2.staff_id left join (-- 取员工工号 select login_acct_no cust_svc_id,seats_emp_no emp_no from dim.dim_ip_seats_info where etl_source = 'ima' and etl_end_date = '99991231' )as x4 on x1.staff_id=x4.cust_svc_id; 基于这个sql,我最后想要的结果结构如下,sql怎么写 SELECT DISTINCT seats_id, --坐席id '在线' as data_value, --坐席类型 status_begin_dt, --状态开始时间 status_end_dt, --状态结束时间 seats_status, --坐席状态 dt
07-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值