Имя: Пароль:
1C
1С v8
Вхождение дат в указанный диапазон
0 Штурман
 
31.10.13
13:40
Допустим, есть таблица примерно следующего вида:

Код    NameS    DateB            DateE
1    A    07.10.2013    26.10.2013
2    B    24.09.2013    16.10.2013
3    C    17.10.2013    02.11.2013
4    D    24.10.2013    30.10.2013
5    E    29.09.2013    17.10.2013
6    F    26.10.2013    08.11.2013
7    G    15.10.2013    31.10.2013

Нужно из нее вывести строки, входящие в указанный промежуток дат.

К примеру, задаем промежуток с 01.10 по 15.10 (DateB и DateE соответственно).

Тогда в результате должны вывеститься строки A, B, E и G.

Как это реализовать в запросе?
1 Рэйв
 
31.10.13
13:42
...
ГДЕ DateB Между &Нач и &Кон
    Или DateE Между &Нач и &Кон
2 butterbean
 
31.10.13
13:45
(1) Е не попадет
3 Рэйв
 
31.10.13
13:46
ну и для вхождения самого интервала
...
Или &Нач<DateB и &Кон>DateE
4 Штурман
 
31.10.13
13:47
(1) Написал:

WHERE TableS.DateB between #10/1/2013# and #10/15/2013#
or  TableS.DateE between #10/1/2013# and #10/15/2013#;

Выводится только A и G
5 GenV
 
31.10.13
13:47
ГДЕ &Нач <= DateE И &Кон >= DateB
6 Рэйв
 
31.10.13
13:48
(4)см еще  (3)
7 Рэйв
 
31.10.13
13:48
или (5) смотря как надо
8 Штурман
 
31.10.13
13:49
(6) это дополнить или вместо "Или DateE Между &Нач и &Кон" написать?
9 Рэйв
 
31.10.13
13:49
дополнить
10 Штурман
 
31.10.13
13:51
(9) написал:

WHERE TableS.DateB between #10/1/2013# and #10/15/2013#
or  TableS.DateE between #10/1/2013# and #10/15/2013#
or #10/1/2013#<TableS.DateB and #10/15/2013#>TableS.DateE;

Опять только A и G выводит
11 Штурман
 
31.10.13
13:53
(5) Написал:

WHERE #10/1/2013# <= TableS.DateB and #10/15/2013#>=TableS.DateE ;

вообще ничего не выводит
12 Ненавижу 1С
 
гуру
31.10.13
13:53
WHERE
  TableS.DateB<=:EndDate
and
  TableS.DateE>=:BeginDate
13 Ненавижу 1С
 
гуру
31.10.13
13:53
(11) перепутал ты, смотри (12)
14 Штурман
 
31.10.13
13:57
(13) написал:

WHERE
TableS.DateB<=#10/15/2013#
and
TableS.DateE>=#10/1/2013# ;

В принципе теперь правильно выводит.

А запрос точный, если к большой таблице его применять, не вылезет ли в будущем лишние строки?
15 GenV
 
31.10.13
13:57
(11) У меня по другому:
WHERE #10/1/2013# <= TableS.DateE and #10/15/2013#>=TableS.DateB ;
16 Штурман
 
31.10.13
13:58
(15) Да, тоже работает, как в (14)
17 ret-Phoenix
 
31.10.13
13:58
CREATE TABLE #test (NameS VARCHAR(10), dateB DATETIME, dateE DATETIME);
INSERT INTO #test (Names,dateb,datee) VALUES ('a','20131007','20131026');
INSERT INTO #test (Names,dateb,datee) VALUES ('b','20130924','20131016');
INSERT INTO #test (Names,dateb,datee) VALUES ('c','20131017','20131102');
INSERT INTO #test (Names,dateb,datee) VALUES ('d','20131024','20131030');
INSERT INTO #test (Names,dateb,datee) VALUES ('e','20130929','20131017');
INSERT INTO #test (Names,dateb,datee) VALUES ('f','20131026','20131108');
INSERT INTO #test (Names,dateb,datee) VALUES ('g','20131015','20131031');

SELECT * FROM #test WHERE '20131001' BETWEEN dateb AND datee or '20131015' BETWEEN dateb AND datee
18 GenV
 
31.10.13
14:00
(14) Можно проверить на всех возможных вариантах вариантах и убедится:
диапазон слева, диапазон справа, диапазон включает период, диапазон внутри периода, диапазон пересекает слева, диапазон пересекает справа
19 Штурман
 
31.10.13
14:01
Хорошо, всем спасибо :)
20 anaed
 
31.10.13
14:03
судя по (0) достаточно просто
ГДЕ DateB Между &Нач и &Кон
21 IBTM
 
31.10.13
14:09
(1) почему не попадет? Вроде, первое же условие выполнится.
22 Штурман
 
31.10.13
14:09
(20) Только A и G выведутся
23 IBTM
 
31.10.13
14:10
(21) не, гоню тоже...
24 anaed
 
31.10.13
14:12
(22) согласен, туплю под вечер)
25 МихаилМ
 
31.10.13
14:19
не забывайте, что по интервалу невозможно построить эффективный индекс. соответственно fullscan гарантирован

и при количестве записей более 100 000 многопользовательская
работа будет некомфортной
26 Штурман
 
31.10.13
14:23
(25) не совсем понял, что вы имеете в виду?
27 МихаилМ
 
31.10.13
14:39
(26)
разжевывать простые вещи не буду
может более подробно о проблеме в (25) уже писал
в
http://yandex.ru/yandsearch?text=%22эффективный%20индекс%22%20МихаилМ&lr=213&site=forum.mista.ru
28 Штурман
 
31.10.13
14:40
(27) посмотрим :)
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс