SET QUOTED_IDENTIFIER ON
GO
--目前只對對B班有效
CREATE function [dbo].[per_GetLeaveMinutes]
(
@start_leave_date datetime,
@end_leave_date datetime,
@workshit_name nvarchar(10)
)
returns int
begin
--declare @start_leave_date datetime
--declare @end_leave_date datetime

declare @leave_hours int--總請假分鐘數

--班別第一時間段起始分鐘
declare @start_workshift_time1 int
declare @end_workshift_time1 int

--班別第二時間段起始分鐘
declare @start_workshift_time2 int
declare @end_workshift_time2 int

declare @current_date datetime
declare @start_time int
declare @end_time int

select @leave_hours=0
--設置班別各時間段參數。
if @workshit_name='B'
    select @start_workshift_time1=8*60,@end_workshift_time1=12*60,
       @start_workshift_time2=13*60+30,@end_workshift_time2=17*60+30
else if @workshit_name='A'
    select @start_workshift_time1=7*60+30,@end_workshift_time1=11*60+30,
       @start_workshift_time2=13*60+30,@end_workshift_time2=17*60+30

select @current_date=convert(nvarchar,@start_leave_date,112)

while @current_date<=@end_leave_date
begin
   if not exists(select calendar_id from mis..KQ_CALENDAR where item_date=@current_date)
   begin
       if convert(nvarchar,@current_date,112)=convert(nvarchar,@start_leave_date,112)
           select @start_time=datediff(minute,@current_date,@start_leave_date)
       else
           select @start_time=@start_workshift_time1
      
       if convert(nvarchar,@current_date,112)=convert(nvarchar,@end_leave_date,112)
           select @end_time=datediff(minute,@current_date,@end_leave_date)
       else
           select @end_time=@end_workshift_time2

--select @start_time,@end_time
       --計算第一個時間段
       if(@start_time<@end_workshift_time1)
          select @leave_hours=@leave_hours+case when @end_time>@end_workshift_time1 then @end_workshift_time1 when @end_time<@start_workshift_time1 then @start_workshift_time1 else @end_time end-
                              case when @start_time<@start_workshift_time1 then @start_workshift_time1 else @start_time end
        --計算第二個時間段
        if(@start_time<@end_workshift_time2 and @end_time>@start_workshift_time2)
          select @leave_hours=@leave_hours+case when @end_time>@end_workshift_time2 then @end_workshift_time2 else @end_time end-
                              case when @start_time<@start_workshift_time2 then @start_workshift_time2 else @start_time end
       
   end
   select @current_date=@current_date+1
end
return @leave_hours
end

转载于:https://www.cnblogs.com/Rolls/archive/2010/07/22/Rolls.html

時間用function 來計算...如此精確.相关推荐

  1. java 余弦定理_Java實現余弦定理計算文本相似度

    相似度度量(Similarity),即計算個體間的相似程度,相似度度量的值越小,說明個體間相似度越小,相似度的值越大說明個體差異越大. 對於多個不同的文本或者短文本對話消息要來計算他們之間的相似度如何 ...

  2. python 拼音相似度_python 計算文本的相似度

    用Python計算文本的相似度 因為后期會需要用到這方面的知識,所以先提前准備准備:如何判斷網頁返回內容的相似度? 找到了幾個Python的方法和庫: 還有高大上的"TF-IDF方法&quo ...

  3. 線陣相機處理時間計算方法

    線陣相機圖像處理時間計算,以xx案子為例, 相機使用16K線陣 最大速度300mm/s FOV 300mm 計算方法: 1,            每個像素點大小=FOV/像素數=300/16*100 ...

  4. 寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7……+n

    看到網路上一篇blog一個問題,引發一群網友的討論. Q:寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7--+n 這是個常見的級數問題,我們必須化簡成closed form ...

  5. 一年前寫的:計算所得稅以及計算24點遊戲

    一年多前一個夜裡寫的, 後來花時間做了些注釋. 可以計算出個人所得稅(月收入);根據所得稅推算個人所得;計算24點的小遊戲. 3部分都包含在一個頁面裡面,純html+javascript. 其中個人所 ...

  6. 計算機術語英文翻譯臺 - 陸對照(侯捷老師整理)

    轉載自侯捷的網站 以下是侯捷個人陸續收集整理的有關於我所涉獵的領域的術語對照(英中繁簡). 歡迎所有朋友給我意見(任何意見).謝謝. 新書寫作,或發表文章時,我會以此表為參考. 本表所列,並不表示我在 ...

  7. 如何計算SDRAM使用頻寬?

    Abstract 只要使用了VGA.TRDB-LCM或者TRDB-LTM,就會使用SDRAM當作frame buffer,由於SDRAM頻寬有限,若沒妥善分配頻寬,最後影像就會不正確. Introdu ...

  8. android 仿ios timepicker,android:TimePicker仿照IOS時間選擇器,可自定義選擇器

    背景: 項目要求寫一個選擇器:不僅僅是單純的時間,還包括自定義部分. 搜了很久,搜出來只用一個自定義view.java類,再簡單封裝下的選擇器: 貼下源碼:public class PickerVie ...

  9. C语言二级考试都是从题库抽取吗,c語言二級考試題庫_全國計算機等級考試二級C語言的考試題目都是從《C語言題庫》裡面抽取的題目嗎_淘題吧...

    Ⅰ 二級c語言考試這幾年的題庫都一樣么,歷年都是從固定的題庫出題么 如果沒有要求必需過二級,那就不要考了,現在的二級大多是靠刷題過,沒什麼太大作用,要把目光放長遠,做項目,學習真技術:當然如果你就是為 ...

最新文章

  1. poj1144(割点)
  2. js中判断两个数字的大小
  3. JS不同类型之间运算与转换
  4. 【SpringMVC】面试常见问题:总结 SpringMVC 运行原理
  5. Test435678
  6. php编译成二进制文件_2020年小米高级 PHP 工程师面试题
  7. 《深入理解Linux内核》笔记5:内存管理
  8. InheritableThreadLocal使用
  9. 当我们谈论 996 的时候我们在谈论什么?
  10. iPhoneiPod Touch定位编写
  11. 2021年顶级服务器备份软件和解决方案
  12. java get与post区别_POST和GET区别
  13. USB无线网卡的Linux驱动移植
  14. 联想a30微型计算机,TEP-I-G W13030123 监控模块,监控单元泰坦TEP-I系列微机监控装置...
  15. root 账号不能登录的解决方法
  16. rufus安装centos8(旧电脑玩Linux)
  17. NUL 与 NULL
  18. Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“(已解决)
  19. 关于响应式设计的一些概念和技术
  20. 计算机网络安全的对策有哪些,计算机网络安全措施有哪些

热门文章

  1. PAT甲级1058(进制转换的“/” ,“%”干货!)
  2. graph面板x轴模式包括哪些_激光五轴加工机床技术参数有哪些?
  3. matlab显示中文乱码的解决办法
  4. linux 安装 yum etcd,安装etcd - Go语言中文网 - Golang中文社区
  5. java与c基本数据类型比较,C++与Java基本数据类型比较
  6. cdn厂商 同兴万点_CDN牌照哪家强?阿里、腾讯牌照差异竟如此之大
  7. PubLayNet:36万文档图像版面分析数据集
  8. 什么叫百度下拉框?除了百度下拉还有哪些下拉词框可以优化?
  9. python定义二维空数组_带有空第二维的数组/向量的Python / numpy问题
  10. thttpd支持php吗,轻量型thttpd+php5