Вставить в таблицу, если время для вставки находится в пределах временного диапазона
Есть ли способ вставить данные в таблицу, если время в настоящее время находится в диапазоне времени по умолчанию?
У меня есть таблица 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', тогда столбец статуса будет "поздно".
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
В качестве последней мысли, продолжая комментарий Strawberry: другой вариант - не хранить эту производную информацию, которую можно очень хорошо вычислить на лету при запросе таблицы:
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