SQL 如果今天结束,自动设置 date_out

SQL set date_out automatically if today ends

我有一个访客系统。当访客签到时,它会设置一个 date_in。当访客结帐时,它会设置 date_out.

但如果访客忘记结账。它说他没有 date_out 所以我想弄清楚如果访问者没有结帐如何设置 date_out。

一个例子:

入住时间:2015-01-19 12:00:00 客人当天忘记退房。 所以如果日期是:2015-01-19 23:59:59。我希望它在 date_out.

上自动设置

因为在另一个查询中,我要求所有没有 date_out 的访问者显示。这样我就可以看到那天谁在大楼里了。

有没有办法自动执行此操作?

Table结构

date_in设置为访客使用姓名签到

您可以创建一个每天运行 23:59:59 的作业,用数据填充 date_out。

我的建议 - 不要编辑数据(并且随后无法识别 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) 只是 "midnight at the start of today" 的一种表达方式。

上述查询应该会为您提供与您所要求的结果相同的结果,但保留实际记录的数据不变。也就是说,只报告今天进入但没有离开的人。

我建议不要更改记录数据的原因是万一您决定稍后更改规则 - 即使用与一天不同的时间间隔来考虑访客已经离开。

假设您的数据在一行中,您可以定期更新值:

update visitors
    set check_out = cast(convert(varchar(10), date_in, 121) + ' 23:59:59') as datetime)
    where check_out is null;

这可以在您闲暇时完成,而不是保证在特定时间运行完成某些工作。