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在。若某卡在某天的班次打卡,算出工作,然不正,,如某班次打卡,示WT0或者NULL
哪位人忙看下
[解决办法]
case when WT1<0 then 0 else WT1 end
[解决办法]
上的,。。。能具,。
UPDATE Attendance SET ....
後面的CASE SQL 如何
[解决办法]
人。。。人下,,的T-SQL(Ver SQL 2000)如何
[解决办法]
想知道DATEDIFF怎么用