|
Вхождение дат в указанный диапазон | ☑ | ||
---|---|---|---|---|
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) посмотрим :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |