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:00 13:10:00 17:05:00 20:00:00
2011-03-27 012456788 07:30:00 13:30:00 17:21:00
2011-03-27 223456789 12:02:00 13:10:00 17:05:00 17:58:00
2011-03-27 112456788 07:30:00 13:30:00 17:21:00
2011-03-26 112356788 07:30:00 12:00:00 13:20:00 17:28:00
2011-03-25 122356788 07:05:00 12:12:00 13:22:00 17: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 3H55M 20H0M
-7H-30M 3H51M 0H0M
*/
這個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怎么用