Напишите SQL — запрос и получите значения для заданного диапазона с помощью

#sql #range #between

#sql #диапазон #между

Вопрос:

 create table demo4  (  sno int,   fromvalue int,   tovalue int )  insert into demo4  values (1, 2002, 2002), (2, 2003, 2003), (3, 2004, 2004), (4, 2001, 2010),  (5, 2006, 2007), (6, 2011, 2011), (7, 2005, 2005), (8, 2006, 2010),  (9, 2006, 2011), (10, 2008, 2009)    |sno |fromvalue |tovalue|   ------ ---------- -------   | 1 | 2002 | 2002 |  | 2 | 2003 | 2003 |  | 3 | 2004 | 2004 |  | 4 | 2001 | 2010 |  | 5 | 2006 | 2007 |  | 6 | 2011 | 2011 |  | 7 | 2005 | 2005 |  | 8 | 2006 | 2010 |  | 9 | 2006 | 2011 |  | 10 | 2008 | 2009 |  

Из приведенной выше таблицы я хочу получить sno значения 1,2,3,4 для данного диапазона 2002-2004 годов как от значения, так и от значения

Я попытался выполнить следующие запросы, но это не работает

 select *  from demo2  where (fromvalue between 2002 and 2004)   or (tovalue between 2002 and 2004)   -- 1, 2, 3 are fetched (4 is not fetched)  select *  from demo2  where 2002 lt;= fromvalue   and tovalue lt;= 2004   -- 1, 2, 3 are fetched (4 is not fetched)  

Комментарии:

1. что вы пробовали сами ?

2. Я попытался с помощью: выберите * из demo2, где (значение между 2020 и 2004 годами) или (значение между 2002 и 2004 годами) выберите * из dem02, где 2022lt;=значение и значение

3. Покажите фактический результат для каждой из ваших попыток и точно объясните, почему ваш результат не соответствует вашим требованиям. Кроме того, почему 4 является одним из ваших ожидаемых результатов? 2001 или 2010 год-это период с 2002 по 2004 год??

4. (4, 2001, 2010) не является ожидаемым результатом , поскольку ни 2001, ни 2010 не находятся между 2002 и 2004 годами!! Вы задавали обратный вопрос??

5. @JonArmstrong, поскольку 2002 и 2004 годы присутствуют в 2001(значение) и 2010(значение), поэтому это должно быть в наборе результатов

Ответ №1:

Если вы хотите пересечение интервалов (перекрытие)

 select *  from demo4  where fromvalue lt;= 2004 and tovalue gt;= 2002   

В период 2001-2010 годов это будет

 select *  from demo4  where fromvalue lt;= 2010 and tovalue gt;= 2001;  

Как правило, интервалы s1 - e1 и s2 - e2 условие s1lt;=e2 and s2lt;=e1 перекрытия Таковы fromvalue - tovalue , и 2001 - 2010 это точно fromvalue lt;= 2010 and 2001 lt;= tovalue .

Комментарии:

1. Если я рассмотрю запрос ur, то для диапазона 2001-2010 я получаю только (sno:4), но мне нужно получить 1,2,3,4,5,7,8,9,10 (т. Е. все значения, кроме 6)

2. @ChaitanyaReddy, нет, ты получишь именно то, что тебе нужно.