|
не получается сделать запрос с условием, в котором участвует вычисляемое поле | ☑ | ||
---|---|---|---|---|
0
alpha78
17.03.21
✎
14:58
|
Здравствуйте, хочу выбрать из спр. ФизЛица людей возрастом меньше 55 лет
Выбираю фио, день рождения, создаю вычисляемое поле для возраста - сегодняшний год - год рождения Запрос.Текст = "ВЫБРАТЬ | ФизическиеЛица.Наименование КАК Наименование, | ФизическиеЛица.ДатаРождения, | ФизическиеЛица.Родитель, | (ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения) КАК Возраст |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица |ГДЕ | НЕ ФизическиеЛица.ЭтоГруппа | И ФизическиеЛица.Родитель <> &Пустой | И Возраст < 55 | |УПОРЯДОЧИТЬ ПО | Наименование"; не получается сделать запрос с условием, в котором участвует вычисляемое поле выдает ошибку - ПОЛЕ НЕ НАЙДЕНО ВОЗРАСТ БРЕД ЧТО ОН ЧЕШЕТ, КОГДА ЕСТЬ ВЫЧИСЛЯЕМОЕ ПОЛЕ И В КОНСТРУКТОРЕ ЗАПРОСОВ ВО ВКЛАДКЕ ОБЪЕДИНЕНИЯ/ПСЕВДОНИМЫ Я ЕГО НАЗВАЛ Возраст Подсобите что я не так делаю, спасибо! |
|||
1
shuhard
17.03.21
✎
15:00
|
(0) И ФизическиеЛица.Возраст < 55
|
|||
2
alpha78
17.03.21
✎
15:07
|
И ФизическиеЛица.Возраст < 55
все равно ругается - поле не найдено - бред |
|||
3
boozin
17.03.21
✎
15:14
|
И (ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения) < 55
|
|||
4
Simod
17.03.21
✎
15:35
|
Рукалицо...
|
|||
5
youalex
17.03.21
✎
15:39
|
Реальный порядок выполнения операторов в запросе (упрощенно, без соединений , ПЕРВЫЕ и РАЗЛИЧНЫЕ) :
1)ИЗ 2)ГДЕ 3)СГРУППИРОВАТЬ 4)ИМЕЮЩИЕ 4)ВЫБРАТЬ 5)УПОРЯДОЧИТЬ Т.о. в операторе "ГДЕ" неизвестно, что у тебя там за синоним в "ВЫБРАТЬ" А вот в УПОРЯДОЧИТЬ - известно. |
|||
6
Малыш Джон
17.03.21
✎
15:39
|
(0) "(ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения) КАК Возраст" - количество открывающих и закрывающих скобок посчитай
|
|||
7
Малыш Джон
17.03.21
✎
15:41
|
+(6) ну и (3), да
|
|||
8
boozin
17.03.21
✎
15:44
|
И (ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения)) < 55
Скобку забыл |
|||
9
youalex
17.03.21
✎
15:46
|
(0) ну и вообще, для этого (ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения)
есть функция запроса РАЗНОСТЬДАТ |
|||
10
Малыш Джон
17.03.21
✎
15:58
|
(9) она довольно своеобразно работает: считает количество "переходов" между границами дат
"ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2019, 12, 31),ДАТАВРЕМЯ(2021, 1, 1), ГОД)" выдаст 2, хотя по факту - 1 год и 1 день и "ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2019, 01, 01),ДАТАВРЕМЯ(2021,12,31), ГОД)" выдаст тоже 2, хотя это 3 года без одного дня |
|||
11
acht
17.03.21
✎
16:11
|
(9) Вообще для этого передают параметром заранее расчитаную дату рождения. Такую, что все люди, родившиеся позже, имеют возраст меньше 55 лет. И волшебным образом и индексы начинают работать и запросы упрощаются...
А то понапишут тут своих формул. |
|||
12
youalex
17.03.21
✎
16:20
|
(10) да ты прав)
И (11) прав вдвойне) |
|||
13
youalex
17.03.21
✎
16:25
|
Про РазностьДат (не знал):
Эта функция возвращает количество пересеченных границ (целое число со знаком), указанных в аргументе datepart, за период времени, указанный в аргументах startdate и enddate. https://docs.microsoft.com/ru-ru/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |