如果最近插入的日期不正确,如何恢复正确的日期

9
如果我有ZKTime机器来登记员工的考勤记录。
有时候这个机器会将一大堆交易数据插入到SQL Server数据库中,但日期却不正确,例如: 8-2103,而不是 11-2016

enter image description here


enter image description here


什么可能是这个问题的原因?如果我无法检测到问题,如何恢复到正确的日期?

1
如果插入了错误的日期,你怎么知道正确的日期是什么? - mendosi
@mendosi:我不知道,我尝试通过“S_T_NO”的顺序猜测最近的日期。 - Anyname Donotcare
1
@任意名称不在乎,是时候联系供应商了吗? - Punter015
1
SQL Server的日期时间是基于自1900年以来的天数,因此如果您选择SELECT DATEDIFF(day,0,'2103-08-28')和SELECT DATEDIFF(day,'1900-01-01','2103-08-28'),两者都将返回74383作为两个日期之间的天数差异的数量,这表明SQL Server Datetime是基于自1900年以来的天数。 - Steve Ford
1
看起来并不是所有的传感器都有正确的日期/时间设置(传感器001看起来是可以的)。您可以设置传感器的日期和时间,请查看以下信息:http://www.ictproduct.com/2014/04/25/3-1-set-date/ - Steve Ford
显示剩余7条评论
2个回答

4
我已经查看了您提供的供应商链接,但它并没有帮助到这个问题。恐怕我们无法回答这个问题,因为它涉及到SQL Server之外的项目。我相信您需要联系供应商支持团队来解决这个问题。
您需要找出以下问题:
1. 时间机器是如何计算CheckTime数据的? 2. 时间机器是如何存储CheckTime数据的? 3. 机器是如何创建要导出到SQL Server的文件的?
这似乎是一个关于系统记录CheckTime数据或将数据导出/写入SQL Server的问题。
至于修正此问题,基本的更新语句可以解决它,但由于存在不同的日期,您需要为每种情况编写一个唯一的更新语句。

1

一种可能的解决方案是利用触发器来验证日期并相应地更新日期。假设表的主键为id,如果新插入的行具有超过今天的日期,则可以将其重置为当前日期时间,因为员工的出勤记录不能在未来。

CREATE TRIGGER CorrectTheDate on Config
FOR INSERT
AS

DECLARE @CT DateTime
DECLARE @id int

SELECT @CT = i.CheckTime FROM inserted i;
SELECT @id= i.id FROM inserted i;

if(@CT >= DATEADD(dd,1,getdate()))
UPDATE MyTable SET CheckTime=getdate() WHERE id=@id

GO

虽然这个想法很好,但代码需要进行一些调整,因为它假设触发器每次只会针对一条记录触发。此外,大多数这些机器在服务器不可用时可以离线工作,比如由于网络断开或服务器维护等原因...等等,在这种情况下,读取器将在不同于实际时间的时间发送记录到服务器。 - Ahmed Saeed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接