[SQL] pl/sql获取工作时间 →→→→→进入此内容的聊天室

来自 , 2019-04-08, 写在 SQL, 查看 133 次.
URL http://www.code666.cn/view/9b89bedd
  1. CREATE OR REPLACE FUNCTION FUN_GET_WORKTIME(PARAM_DATE IN DATE) RETURN NUMBER
  2. IS
  3. num_worktime NUMBER:= 8;--工作总时长
  4. num_mi NUMBER:= 60;--60分钟
  5. num_ss NUMBER:= 60;--60秒
  6. num_work_begin NUMBER:= 8/24 + 30/(24*60);--8:30
  7. num_noon_begin NUMBER:= 11/24 + 30/(24*60);--11:30
  8. num_noon_end NUMBER:= 12/24;--12:00
  9. num_work_end NUMBER:= 17/24;--17:00
  10. num_time NUMBER;--时间
  11. num_return NUMBER;--返回值
  12. d_init DATE := to_date('1988-08-08 00:00:00','YYYY-MM-DD hh24:mi:ss'); --初始日期
  13. num_holi NUMBER;
  14. num_holi_y NUMBER;
  15. BEGIN
  16.   --查询节假日表holiday
  17.   SELECT COUNT(1) INTO num_holi FROM holiday h WHERE h.holi_day < to_char(PARAM_DATE, 'YYYY-MM-DD');
  18.   SELECT COUNT(1) INTO num_holi_y FROM holiday h WHERE h.holi_day = to_char(PARAM_DATE, 'YYYY-MM-DD');
  19.   num_return := FLOOR(PARAM_DATE - d_init - num_holi);
  20.   --判断当天是否为节假日
  21.   IF(num_holi_y >= 1) THEN
  22.     num_return := num_return + 0;
  23.   ELSE
  24.     num_time := PARAM_DATE - to_date(to_char(PARAM_DATE,'YYYY-MM-DD')||' 00:00:00','YYYY-MM-DD hh24:mi:ss');
  25.     --时间在8:30以前至0
  26.     IF(num_time<=num_work_begin) THEN
  27.       num_return := num_return + 0;
  28.     END IF;
  29.     --时间在8:30到11:30之间
  30.     IF(num_time > num_work_begin AND num_time < num_noon_begin) THEN
  31.       num_return := num_return + (num_time - num_work_begin);
  32.     END IF;
  33.     --时间在11:30到12:00之间  
  34.     IF(num_time > num_noon_begin AND num_time<=num_noon_end) THEN
  35.       num_return := num_return + (num_noon_begin-num_work_begin);
  36.     END IF;
  37.     --时间在12:00到17:00之间
  38.     IF(num_time > num_noon_end AND num_time<=num_work_end) THEN
  39.       num_return := num_return + (num_time - num_work_begin - (num_noon_end - num_noon_begin));
  40.     END IF;  
  41.     --时间大于17:00
  42.     IF(num_time > num_work_end ) THEN
  43.       num_return := num_return + (num_work_end - num_work_begin - (num_noon_end - num_noon_begin));
  44.     END IF;  
  45.    
  46.  
  47.   END IF;
  48.    num_return := num_return * num_worktime * num_mi * num_ss;
  49. RETURN (num_return);
  50. END FUN_GET_WORKTIME;
  51. //SQL/1227

回复 "pl/sql获取工作时间"

这儿你可以回复上面这条便签

captcha