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