Вставить в таблицу, если время для вставки находится в пределах временного диапазона

Есть ли способ вставить данные в таблицу, если время в настоящее время находится в диапазоне времени по умолчанию?

У меня есть таблица 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
Другие вопросы по тегам