首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

T-SQL統計時間間隔解决方法

2012-12-24 
T-SQL統計時間間隔現有MS SQL 的一個表Attendance(ADate,CardNo,OnDuty1,OffDuty1,OnDuty2,OffDuty2,OnDut

T-SQL統計時間間隔
現有MS SQL 的一個表Attendance(ADate,CardNo,OnDuty1,OffDuty1,OnDuty2,OffDuty2,OnDuty3,OffDuty3),ADate為時間類型。其餘均為Varchar數據類型,其中OnDuty1,為班次的上午上班的打卡時間,OffDuty1為班次的上午下班的打卡時間,OnDuty2、OffDuty2為班次的下午上班打卡時間、下午下班打卡時間,OnDuty3、OffDuty3為班次的晚上加班上班打卡時間、晚上加班下班打卡時間。。。。有如下數據記錄,想在要統計某個卡號在某天的上午上班工作時間WT1由(OffDuty1-onDuty1)所得,下班上班工作時間WT2由(OffDuty2-OnDuty2)所得,WT3晚上加班工作時間由(OffDuty3-OnDuty3)所得

ADate         CardNo         OnDuty1 OffDuty1 OnDuty2 OffDuty2    OnDuty3 OffDuty3  WT1 WT2 WT3
2011-03-27  123456789      07:15:0013:10:0017:05:00 20:00:00
2011-03-27  012456788      07:30:0013:30:0017:21:00
2011-03-27  223456789  12:02:0013:10:0017:05:00  17:58:00 
2011-03-27  112456788      07:30:0013:30:0017:21:00
2011-03-26  112356788      07:30:0012:00:0013:20:0017:28:00
2011-03-25  122356788      07:05:0012:12:0013:22:0017:25:00   17:45:00 22:36:00

現在要Update下,,分別計算出WT1=(OffDuty1-onDuty1),WT2=(OffDuty2-OnDuty2),WT3=(OffDuty3-OnDuty3)的工作時間,

T-SQL:
UPDATE ATTENDANCE SET WT1 =  CONVERT(VARCHAR, ISNULL(DATEDIFF(MI,ONDUTY1,OFFDUTY1),'')/60)+ 'H'+CONVERT(VARCHAR, ISNULL(DATEDIFF(MI,ONDUTY1,OFFDUTY1),'')%60)+'M',
         WT2 = CONVERT(VARCHAR, ISNULL(DATEDIFF(MI,ONDUTY2,OFFDUTY2),'')/60)+ 'H'+CONVERT(VARCHAR, ISNULL(DATEDIFF(MI,ONDUTY2,OFFDUTY2),'')%60)+'M',
         WT3 = CONVERT(VARCHAR, ISNULL(DATEDIFF(MI,ONDUTY3,OFFDUTY3),'')/60)+ 'H'+CONVERT(VARCHAR, ISNULL(DATEDIFF(MI,ONDUTY3,OFFDUTY3),'')%60)+'M'
  


顯示結果如下
/*
 WT1       WT2     WT3
-7H-15M   3H55M20H0M
-7H-30M   3H51M0H0M
*/
這個T—SQL問題在。若某個卡號在某天的班次沒打卡,計算出負工作時間數來,顯然不正確,,如某個班次沒打卡,則顯示WT為0或者NULL

請哪位達人幫忙看下

[解决办法]

case when WT1<0 then 0 else WT1 end 

[解决办法]
樓上的,。。。能具體點嗎,。
UPDATE Attendance SET ....
後面的CASE SQL 如何寫
   
[解决办法]
沒人進來嗎。。。達人過來下,,這樣的T-SQL(Ver SQL 2000)如何寫
[解决办法]
想知道DATEDIFF怎么用

热点排行
Bad Request.