我有一个访客系统。当访问者签入时,它设置date_in。当访问者签出时,它设置了一个date_out。
但如果访客忘记退房。它说他没有date_out所以我试图弄清楚如果访客没有结账时如何设置date_out。
一个例子:
登记入住时间:2015-01-19 12:00:00 访客忘了那天退房。 所以如果日期是:2015-01-19 23:59:59。我希望它在date_out上自动设置。
因为有了另一个查询,我要求所有访问者都没有显示date_out。所以那天我可以看到大楼里有谁。
有没有办法自动执行此操作?
表格结构
当访问者以他的名字签到时,
设置date_in。
答案 0 :(得分:1)
我的建议 - 而不是编辑数据(以及随后无法在23:59识别真正的结账),只需更新查询:
SELECT * /* TODO - actual columns */
FROM visits
WHERE
date_out IS NULL AND
date_in >= DATEADD(day,DATEDIFF(day,0,CURRENT_TIMESTAMP),0)
表达式DATEADD(day,DATEDIFF(day,0,CURRENT_TIMESTAMP),0)
只是一种说法"今天开始的午夜"。
上述查询应该为您提供与您要求的结果相同的结果,但保留实际记录的数据。也就是说,只报告今天进入但未离开的人。
我建议不更改录制数据的原因是您决定稍后更改规则 - 即使用不同于一天的间隔来考虑访问者离开。
答案 1 :(得分:0)
你可以创建一个每天运行23:59:59的作业,用datelout填充数据。
答案 2 :(得分:0)
假设您将数据放在一行中,您可以定期更新这些值:
update visitors
set check_out = cast(convert(varchar(10), date_in, 121) + ' 23:59:59') as datetime)
where check_out is null;
这可以在闲暇时完成,而不是保证某个工作在特定时间运行。