0

如果时间当前在默认时间范围内,有没有办法将数据插入表中?

我有一个表 time_tb 并且有列

id, time_start, time_end, time_inserted, status

time_start 和 time_end 具有默认值,time_start='08:00:00' 和 time_end='08:59:00'

如果 time_inserted = '08:10:00' 那么数据将被插入并且状态列将被标记为“存在”,如果它 time_inserted = '09:00:00' 那么状态列将被标记为“延迟”。

4

1 回答 1

1

您可以使用case表达式来检查time_inserted并计算status相应的值。可能是这样的:

insert into time_tb(time_start, time_end, time_inserted, status)
select
    '08:00:00',
    '08:59:00,
    @time_inserted,
    case 
        when @time_inserted >= '09:00:00' then 'late'
        when @time_inserted >= '08:00:00' then 'present'
        else 'put something relevant here'
    end

另一种选择是使用计算列(因此您不需要将逻辑放在每个INSSERT语句中)。

alter table time_tb modify status varchar(20) as (
    case 
        when time_inserted >= '09:00:00' then 'late'
        when time_inserted >= '08:00:00' then 'present'
        else 'put something relevant here'
    end
);

您还可以使计算动态化:

case 
    when time_inserted >= time_end then 'late'
    when time_inserted >= time_start then 'present'
    else 'put something relevant here'
end

作为最后的想法,跟进草莓的评论:另一种选择是不存储此派生信息,在查询表时可以很好地即时计算:

select
    t.*,
    case 
        when time_inserted >= time_end then 'late'
        when time_inserted >= time_start then 'present'
        else 'put something relevant here'
    end status
from mytable t
于 2019-12-27T10:02:50.757 回答