我想通过更新查询将查询中提取的差异存储到考勤表中。到目前为止,我有一个表考勤和日期时间有用户登记的日期和时间,我正在计算与'现在'GetDate()的'那么'日期时间的差异。时间格式是24小时不是12小时。SQL Server - 通过SQL服务器代理存储/保存DateDIFF
AttendanceId UserId AttendanceStatus Hours CheckIn/Out DateTime
---------------------------------------------------------------------
1 22 Present 0 In 2016-6-23 5:30:00
2 23 Present 0 In 2016-6-23 5:30:00
3 24 Present 0 In 2016-6-23 5:30:00
4 25 Present 0 In 2016-6-23 5:30:00
为此,我使用
Select [DateTime],
DATEDIFF(MI, (SELECT IIF(ISDATE([DateTime]) = 1, CONVERT(DATETIME, [DateTime], 111), [DateTime]) as DT_Attendance), GETDATE())/60.0 as Hours_Difference
from
Attendance where CheckInCheckOut = 'In'
and [DateTime] = CONVERT(date, getdate())
此查询是输出我有:现在
Datetime Hours_Difference
---------------------------------
2016-6-23 1.20233434
2016-6-23 1.20233434
,在SQL Server中,我想更新表Attendance
并存储该值'4'在列Hours
的所有行中分别为Hours_Difference = 4 or >4
,这里(假设)差别是:
Datetime Hours_Difference
----------------------------------------
2016-6-23 5:30:00 4.00000000
2016-6-23 5:30:00 5.50323134
表的最终结果应该是这样的:
AttendanceId UserId AttendanceStatus Hours CheckIn/Out DateTime
---------------------------------------------------------------------
1 22 Present 4 In 2016-6-23 5:30:00
2 23 Present 4 In 2016-6-23 5:30:00
3 24 Present 4 In 2016-6-23 5:30:00
4 25 Present 4 In 2016-6-23 5:30:00
我已阅读本约6-7倍,它只是没有任何意义。我必须问,虽然....为什么你有一个名为DateTime的列不是日期时间数据类型?您必须检查该值是否是有效的日期时间。这就是datetime数据类型的意义所在,所以你不必做所有这些疯狂事情。你会将整数存储在varchar中吗?我不明白为什么这么多人将日期作为角色数据存储。真的,你应该避免保留字作为列名。 –
既然你已经知道'IIF'(这导致你的标签'mysql'在这里是错误的),我不确定你在找什么。 IFF(Hours_Difference> 4,round(Hours_Difference,0),Hours_Difference)'? – Solarflare
@SeanLange因为,我搜索了谷歌,并没有帮助Sql DateTime支持在C#中使用DateTime like“”+ DateTime.Now。ToString(“yyyy-MM-dd”)+“%' – ARr0w