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

时间:2015-01-19 13:45:06

标签: sql sql-server-2008

我有一个访客系统。当访问者签入时,它设置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 structure

当访问者以他的名字签到时,

设置date_in。

3 个答案:

答案 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;

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