我有两张桌子:
HourList - 在一个字段中每天的每小时:小时
LoginLogout - 有员工和登录时出来
我正在尝试从MySQL中的答案中调整代码,但是从CASE语句到timeadd转换为dateadd会遇到各种各样的问题。我真的相信这个MySQL代码正是我想要的,我只是没有把它自己转换为SQL。这是MySQL的代码...我的一团糟,不值得发帖。
select hour, userid,
case
when login < hour and logout >= ADDTIME(hour,'1:00:00.0') then '1:00:00.0'
when login >= hour and logout < ADDTIME(hour, '1:00:00.0')then TIMEDIFF(logout, login)
when login >= hour and logout > ADDTIME(hour, '1:00:00.0') then TIMEDIFF(ADDTIME(hour, '1:00:00.0'), login)
when login < hour and logout < ADDTIME(hour, '1:00:00.0') then TIMEDIFF(logout, hour)
else '00:00:00.0'
end case
from hourlist join loginlogout
on (login >= hour and login < ADDTIME(hour,'1:00:00.0')) or (logout >= hour
and logout < ADDTIME(hour,ADDTIME(hour,'1:00:00.0'))
order by hour
很抱歉发布错误的帖子或其他任何我搞砸了,第一次发帖。提前谢谢。
---不知道我是否越来越近......但这是我根据每个人的反馈得到的。这仍然是错误的......
select hourlist.hour, employeelabor.empposid,
case
when employeelabor.clockin < hourlist.hour and employeelabor.clockout >= dateadd(HH,1,hourlist.hour) then '1:00:00.0'
when employeelabor.clockin >= hourlist.hour and employeelabor.clockout < dateadd(HH,1,hourlist.hour) then datediff(mi,employeelabor.clockout, employeelabor.clockin)
when employeelabor.clockin >= hourlist.hour and employeelabor.clockout > dateadd(HH,1,hourlist.hour) then datediff(mi,1,dateadd(mi,hourlist.hour,1))
when employeelabor.clockin < hourlist.hour and employeelabor.clockout < dateadd(HH,1,hourlist.hour) then datediff(mi, hourlist.hour, employeelabor.clockout)
else '00:00:00.0'
end
MinWorked
from hourlist
JOIN dbo.employeelabor
on (employeelabor.clockin >= hourlist.hour and employeelabor.clockin < dateadd(HH,1,hourlist.hour)
or (employeelabor.clockout >= hourlist.hour
and employeelabor.clockout < dateadd(hh,hourlist.hour,dateadd(hh,hourlist.hour,1))
order by hourlist.Hour
答案 0 :(得分:0)
对这些功能使用以下语法:
DATEADD(HH, 1, [hour])
HH是几个小时,您在[小时]列中向DateTime添加了1小时。
DATEDIFF(mi, [hour], [logout])
mi是几分钟。
CASE WHEN ... THEN ... ELSE ... END
这与mysql几乎相同。
答案 1 :(得分:0)
对于SQL Server(Transact-SQL),假设hour
,login
和logout
是数据类型TIME
...
与MySQL ADDTIME(foo,'1:00:00')
相当的粗略是
DATEADD(HOUR,1,foo)
SQL Server 2008或更高版本中与MySQL TIMEDIFF(bar,foo)
的粗略等价物将是
DATEDIFF(SECOND,foo,bar)
此表达式将返回整数秒数(&#34;边界数&#34;交叉)。要将格式化为hh:mm:ss
格式的字符串,您需要使用整数除法和模数函数。例如:
FLOOR(integer_seconds / 3600) = whole hours
FLOOR((integer_seconds % 3600) / 60) = remainder whole minutes
FLOOR(integer_seconds % 60) = remainder whole seconds
要将分钟和秒格式化为两个字符,您可以将整数值强制转换为VARCHAR
,前置一个&#39; 0&#39;字符,并取最右边的两个字符。
或者,要获取格式化的整数秒,您可以将值取为某个虚拟日期时间值(午夜),以获取datetime
,然后CONVERT
使用样式获取VARCHAR它可以为您提供所需的格式。 (您可能需要使用规范/固定格式样式(如20?)"yyyy-mm-dd hh:mm:ss"
,并使用字符串函数(SUBSTR或RIGHT)来删除&#34;日期部分。)