Участник сообщества #10
Участник сообщества #10
25 июл. 2025 г., 10:16(изменён)
Решено
0
0

Сравнение даты рождения с текущей датой в геймификации

Из чата сообщества

Приветствую, подскажите кто нибудь работал с бейджами в геймификации. Мне нужно прописать дополнительное условие. Судя по всему программный код возвращает результат который сравнивается с "Максимальным значением". К примеру, сколько сотрудник прошел курсов 5, максимальное значение 4. Значит сотруднику присваивается бейдж. Но моя задача следующая проверять если у сотрудника сегодня день рождения. Но проблема в том что максимальное значение принимает только челое значение, а не дату.

Соответственно возникает вопрос как я могу сравнить дату с сегодняшней?

photo_2323@25-07-2025_13-16-30.jpg
Участник сообщества
Участник сообщества25 июл. 2025 г., 10:47(изменён)
Решение

Может так? Программный код предварительной выборки сотрудников:

RESULT.arrPersonIDs = ArrayExtractKeys(ArraySelect(XQuery('for $elem in collaborators where $elem/is_dismiss=false() return $elem'), 'OptDate(This.birth_date) != undefined && Day(OptDate(This.birth_date)) == Day(Date()) && Month(OptDate(This.birth_date)) == Month(Date())'),'id');

или так (тут проверка непустоты даты рождения внутри XQuery - это оптимальнее)

RESULT.arrPersonIDs = ArrayExtractKeys(ArraySelect(XQuery('for $elem in collaborators where $elem/is_dismiss=false() and $elem/birth_date != null() return $elem'), 'Day(OptDate(This.birth_date)) == Day(Date()) && Month(OptDate(This.birth_date)) == Month(Date())'),'id');
Участник сообщества
Участник сообщества25 июл. 2025 г., 12:55(изменён)

Выглядит достойно, как будто это мне подходит, спасибо)

Участник сообщества
Участник сообщества25 июл. 2025 г., 13:22(изменён)

Day и Mouth будет работать только с MS Sql базой

Участник сообщества
Участник сообщества25 июл. 2025 г., 13:27(изменён)

даже если внутри дата обёрнута в OptDate ? на других БД я не проверял, но и в самих функциях это не указано, поэтому удивился

Участник сообщества
Участник сообщества25 июл. 2025 г., 13:49(изменён)

Твой запрос будет интерпретирован в прямой, и на MS SQL cервере функция Day() и Mouth() есть, а на постгре на пример нет. по этому твой запрос ничего не вернет на постгре,. Так как он сломанный будет. И на время подвиснет так как при ошибке посгря не сразу возвращает пустоту а с задержкой.

Участник сообщества
Участник сообщества25 июл. 2025 г., 13:54(изменён)

даже несмотря на то, что Day и Month используются внутри ArraySelect? вроде же в прямой запрос интерпретируется XQuery-запрос, а дальше его результат уже в ArraySelect обёрнут и там Day и Month уже работают как функции WebSoft

Чтобы ответить, необходимо войти в систему