Использование After, Before, Include во временной базе данных

Прежде всего, спасибо, что читаете меня и пытаетесь мне помочь.

Я начинаю работать с временной базой данных, а именно с битемпоральной базой данных со следующей структурой:

CREATE TABLE poblat (
  dni VARCHAR2(9), 
  name VARCHAR(12), 
  tiv DATE,
  tfv DATE,
  tit TIMESTAMP,
  tft TIMESTAMP,
  PRIMARY KEY (dni,tiv, tit)
);

Я хотел бы знать, как я могу выполнить запрос, используя такое предложение, как after, before или include.

Например, я делаю это:

SELECT nombre, tiv, tfv FROM poblat
WHERE (tiv, tfv) INCLUDE (to_date('31/12/2014'), to_date('31/12/2016'));

Но разработчик sql говорит, что я использую «недопустимый реляционный оператор».

Спасибо за внимание и за помощь.


person Luniz    schedule 25.11.2017    source источник
comment
Возможный дубликат несколько столбцов SQL в предложении IN   -  person Mehdi Ghasri    schedule 25.11.2017
comment
Вы можете использовать эту функцию, чтобы получить количество перекрывающихся дней, если это то, что вы пытаетесь сделать. ">github.com/kaushikjnayak/SQL_PLSQL/blob/   -  person Kaushik Nayak    schedule 25.11.2017
comment
В SQL (или Oracle) нет INCLUDE   -  person a_horse_with_no_name    schedule 25.11.2017


Ответы (2)


Предположительно, в вашем предложении WHERE указан диапазон дат, и вы ищете записи, попадающие в этот диапазон. Если так:

SELECT nombre, tiv, tfv 
FROM poblat
WHERE tiv > =to_date('31/12/2014')  -- start of date range
and  tfv <= to_date('31/12/2016')  -- end of date range
;
person APC    schedule 25.11.2017

нет INCLUDE - это Oracle's SQL. Согласно документу битемпоральной базы данных http://docs.marklogic.com/guide/temporal/searching#id_78584 , есть два последовательных оператора Аллена, которые, похоже, соответствуют include :

aln_equals: x-start = y-start и x-end = y-end aln_contains: x-start ‹ y-start и x-end > y-end

(где X и Y - оба периода) может привести к тому, что Oracle:

SELECT nombre, tiv, tfv FROM poblat WHERE to_date(tiv,'dd/mm/yyyy') >= to_date('31/12/2014','dd/mm/yyyy') and to_date(tif,'dd/mm/yyyy') <= to_date('31/12/2016','dd/mm/yyyy');
person Barbaros Özhan    schedule 25.11.2017
comment
Спасибо, Барбарос, запрос отлично работает с IN, но если я использую предложение AFTER или BEFORE, разработчик sql всегда показывает ошибку, указывающую на недопустимый реляционный оператор. - person Luniz; 25.11.2017
comment
@Чови, пожалуйста. Ключевые слова AFTER и BEFORE используются, в частности, в триггере базы данных, но не в операторе sql. Пожалуйста, явно отредактируйте свой вопрос, чтобы увидеть, где вы встречаете такую ​​​​ошибку. - person Barbaros Özhan; 25.11.2017
comment
Еще раз спасибо! я был так смущен. Я пытался использовать это ключевое слово, когда мне приходилось использовать такие операторы, как ‹ ›. Спасибо за помощь, с вашей помощью я решил свою проблему!!!!! - person Luniz; 25.11.2017
comment
Справочник по языку Oracle SQL: docs.oracle.com/cloud/latest/ db112/SQLRF/toc.htm - person William Robertson; 25.11.2017
comment
@BarbarosÖzhan where (tiv, tfv) in (...) выдает мне ORA-00920: недопустимый реляционный оператор. Здесь можно указать только один элемент. В любом случае кажется, что вопрос касается временных диапазонов, а не in списков. - person William Robertson; 25.11.2017
comment
@WilliamRobertson, вы правы, я проверил и удивился, спасибо. - person Barbaros Özhan; 25.11.2017