К ВОПРОСУ ПРО ВОЗРАСТ (ACCESS SQL) |
Поскольку в последнее время участилась отчётность, связанная с указанием возраста преподавателей (я правда не понимаю, почему инстанции Университета направляют на кафедры запросы о возрастах, в то время как существует централизованная база данных РУТ, откуда я и сам утаскиваю дни рождения сотрудников в свою локальную базу), то поднимаю данную тематику. Бессмысленная и беспощадная бумажная работа.
В общем, вынудили меня (косвенно) привести в порядок запрос на подсчёт разницы дат. Оно от лукавого, то есть от лени: надоедает каждый раз проверять так оно или не так в базе запросами посчитано? Помнил, ведь, что не так, потому как поленился сделать в своё время всё как следует.
И я публикую этот запрос здесь исключительно для того, чтобы не потерять, а не дабы похвастаться каким-то инновационным решением, которое таковым, кстати, и не является вовсе. Это типовая инженерная задача базового курса программирования, правда при использовании языка структурированных запросов она решается не столь же просто и очевидно из-за громоздкости применяемых в ней конструкций. Всё же, SQL заставляет под другим углом думать по сравнению-то с тем же C#.
Исходно у меня был такой нехитрый запрос из серии "начхать на +/- год":
SELECT [ФИО], DATEDIFF("yyyy",Преподаватели.Год_рождения,DATE())-1 AS Возраст_в_годах
FROM Преподаватели;
Сейчас контроль стал более строгим, потому "начхать" уже становится себе дороже. Дополнил логикой, что если день рождения преподавателя к настоящему моменту ещё не случился, то вычитать из полученной разницы по годам один дополнительный год (декрементирование результата), а если день рождения случился, то просто брать разницу рассматриваемых годов.
Логика не хитрая, но время на отладку у меня отняла. В самом "Access" со скобками стабильно путался и без помощи "Notepad++" не обошлось. И тут же прошу прощения за отсутствие в запросах конечного форматирования согласно правилам вежливости программиста. В рамках HTML это проблематично и тоже отнимает время. Хочется потратить его на что-то более полезное, чем вежливость.
SELECT [ФИО],
IIF( Month(Преподаватели.Год_рождения) > Month(Date()),
DATEDIFF("yyyy",Преподаватели.Год_рождения, Date())-1,
IIF ( Month(Преподаватели.Год_рождения) = Month(Date()) AND Day(Преподаватели.Год_рождения) > Day(Date()),
DATEDIFF("yyyy",Преподаватели.Год_рождения, Date())-1,
DATEDIFF("yyyy",Преподаватели.Год_рождения, Date())
)
) AS Возраст_в_годах
FROM Преподаватели;
Рубрики: | События Компьтерное АУИшное |
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |