SQLite добавляет поле минут в поле даты - PullRequest
0 голосов
/ 01 августа 2020

Допустим, у меня есть простая база данных, подобная этой:

CREATE TABLE test (start TEXT, end TEXT, duration INTEGER);

start и end - это даты, а продолжительность указывается в минутах. Я хотел бы проверить, есть ли начало + продолжительность <конец </p>

Я знаю, что могу использовать функцию даты datetime(start,'+14 minutes');, но как мне это сделать с другим значением столбца?

Ответы [ 3 ]

1 голос
/ 01 августа 2020

Если вы хотите создать ограничение, чтобы start + duration всегда было меньше end в вашей таблице, тогда следующий синтаксис:

CREATE TABLE test (
  start TEXT, 
  end TEXT, 
  duration INTEGER,
  CHECK (DATETIME(start, duration || ' minute') < end)
);

Нет необходимости объединять '+'. Это будет работать, только если ваши столбцы даты имеют единственный допустимый формат даты для SQLite - YYYY-MM-DD hh:mm:ss. Обратите внимание: если таблица уже существует, вы не можете добавить ограничение. Вам нужно будет создать новую таблицу с указанной выше схемой (включая ограничение), скопировать данные из старой таблицы в новую таблицу (если они соответствуют условию ограничения), удалить старую таблицу и переименовать новую таблицу.

0 голосов
/ 01 августа 2020

Это то, что вы хотите?

dt_start < datetime(dt_end, '+' || duration || ' minute')

Обратите внимание, что start и end являются языковыми ключевыми словами в большинстве баз данных, поэтому не лучший выбор для имен столбцов. Я переименовал эти столбцы dt_start и dt_end в приведенном выше коде.

0 голосов
/ 01 августа 2020

Вы можете построить строку:

datetime(start, '+' || dur || ' minute')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...