Как определить, предшествует ли одна временная метка другой в postgresql? - PullRequest
1 голос
/ 11 марта 2011

Я хочу добавить ограничения в таблицу, требующие checkout_time для продолжения return_time, и оба они должны быть раньше, если они есть.

Как правильно сделать это в PostgreSQL? Мне не удалось определить, какие функции даты были наиболее подходящими.

Ответы [ 3 ]

2 голосов
/ 11 марта 2011

Вы можете просто сравнивать время друг с другом, как любое другое значение.

postgres=# SELECT TIMESTAMP '2011-03-11 10:40:13' < NOW();
 ?column? 
----------
 t
(1 row)

Таким образом, вы можете сравнивать значения очень легко.Таким образом, с вашей таблицей вы можете добавить ограничение CHECK.

CREATE TABLE foo(
    mydateTIMESTAMP
    CHECK (mydate < NOW()));

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

1 голос
/ 11 марта 2011

Почему бы вам просто не использовать оператор <?

mydb=# select '2011-03-01'::timestamp < '2011-03-02'::timestamp;
 ?column? 
----------
 t
(1 row)

mydb=# select '2011-03-01'::timestamp < '2011-03-01'::timestamp;
 ?column? 
----------
 f
(1 row)
1 голос
/ 11 марта 2011

В дополнение к ответу DrColossos, здесь есть проверка «один перед другим»:

ALTER TABLE foo 
   ADD CONSTRAINT check_time CHECK (checkout_time < return_time)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...