|
Не работает условие "ГДЕ" в запросе. | ☑ | ||
---|---|---|---|---|
0
Беата Смит
16.04.19
✎
18:33
|
Добрый вечер! Задача вроде простейшая, но, видимо, не для моего мозга.
Короче, мне нужно получить список всех пятых дней недели за определенный период: дата пятого понедельника в месяце, дата пятого вторника в месяце и так далее... Я написала запрос, который выводит весь список дат за период с названием дня недели (ДеньНедели) и его порядковым номером в месяце (НомерДняВМесяце). Запрос = Новый Запрос; Запрос.Текст = ("ВЫБРАТЬ | КалендарныеГрафики.ДатаГрафика как ДатаГрафика, | ДЕНЬНЕДЕЛИ(КалендарныеГрафики.ДатаГрафика) КАК ДеньНедели, | (ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(КалендарныеГрафики.ДатаГрафика, МЕСЯЦ), КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1) / 7 - 0.6 КАК ЧИСЛО(15, 0))) + 1 КАК НомерДняВМесяце |ИЗ | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики |ГДЕ | КалендарныеГрафики.ДатаГрафика МЕЖДУ &НачДата И &КонДата |УПОРЯДОЧИТЬ ПО | КалендарныеГрафики.ДатаГрафика "); Запрос.УстановитьПараметр("НачДата", НачДата); Запрос.УстановитьПараметр("КонДата", КонДата); Результат = Запрос.Выполнить().Выгрузить(); для каждого строчки из результат цикл сообщить(строчки.НомерДняВМесяце); конеццикла; Я прогоняла проверку, считает он правильно. И в получающейся на выходе структуре есть поле НомерДняВМесяце, в котором попадаются цифры 5. Но когда я дописываю условие |ГДЕ | (КалендарныеГрафики.ДатаГрафика МЕЖДУ &НачДата И &КонДата) И (НомерДняВМесяце = 5) Запрос тупо перестает работать. Я и скобки по-разному расставляла, и какие абсурдные идеи, типа той, где приводила НомерДняВМесяце к строке и писала |ГДЕ | (КалендарныеГрафики.ДатаГрафика МЕЖДУ &НачДата И &КонДата) И (Представление(НомерДняВМесяце) = ""5"") Не работает это условие. И все тут. Просто скажите, что я делаю не так?((( Я чувствую, что какой-то глупый косяк в моей голове и ответ совсем на поверхности. Но я уже сдалась. Хэлп! |
|||
1
azernot
16.04.19
✎
18:37
|
|ГДЕ
| (КалендарныеГрафики.ДатаГрафика МЕЖДУ &НачДата И &КонДата) И ( (ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(КалендарныеГрафики.ДатаГрафика, МЕСЯЦ), КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1) / 7 - 0.6 КАК ЧИСЛО(15, 0))) + 1 = 5) |
|||
2
Rie
16.04.19
✎
18:38
|
(0) Зачем так сложно вычислять номер дня, если в языке запросов есть функция ДЕНЬ?
И тогда ГДЕ (......) И (ДЕНЬ(КалендарныеГрафики.ДатаГрафика)=5) |
|||
3
Черный маклер
16.04.19
✎
18:45
|
как-то сложно
ГДЕ ... ДЕНЬ(КалендарныеГрафики.ДатаГрафика)-28 > 0 |
|||
4
Черный маклер
16.04.19
✎
18:47
|
или
ГДЕ ... НЕДЕЛЯ(КалендарныеГрафики.ДатаГрафика)>4 |
|||
5
Черный маклер
16.04.19
✎
18:47
|
+4 ошибочно
|
|||
6
Жан Пердежон
16.04.19
✎
18:53
|
ГДЕ
...ДЕНЬ(КалендарныеГрафики.ДатаГрафика) > 28 |
|||
7
Sapiens_bru
16.04.19
✎
19:04
|
(0) Условие в ГДЕ накладывается по тем же полям, которые могут быть получены в выборке, в секции ВЫРАЗИТЬ. Поэтому если вы в выборке пишите
(ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(КалендарныеГрафики.ДатаГрафика, МЕСЯЦ), КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1) / 7 - 0.6 КАК ЧИСЛО(15, 0))) + 1 КАК НомерДняВМесяце То и в ГДЕ пишите (ВЫРАЗИТЬ((РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(КалендарныеГрафики.ДатаГрафика, МЕСЯЦ), КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1) / 7 - 0.6 КАК ЧИСЛО(15, 0))) + 1 = 5 |
|||
8
Беата Смит
16.04.19
✎
19:22
|
(2) Ваш пример найдет 5 день в месяце, то есть 5 января, 5 февраля... а не 5ый понедельник, вторник и так далее в месяце)
|
|||
9
Беата Смит
16.04.19
✎
19:27
|
(3) (6) Ну да, согласна, в случае с конкретно 5-м днем не было нужды вычислять все номера дней недели)
|
|||
10
Беата Смит
16.04.19
✎
19:29
|
(1) (7) Да, мой косяк. Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |