Показать сообщение отдельно
Старый 14.09.2022, 15:57   #1  
Maximin is offline
Maximin
NavAx
NavAx Club
 
409 / 341 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Параметры и литералы - разные результаты запросов с датами
На днях обнаружил прекрасное.
Сразу скажу, что это 4ка или 2009. 2012ю заводить не стал - просьба имеющим проверить.
Суть в чем - следующий Job выдает разное кол-во записей в зависимости от того, forceliterals в запросе или forceplaceholders. Глюк связан с обработкой дат при их передаче как литералов в выражениях критериев запросов where. Там в качестве вот этой плюс единицы к TransDate (т.е. любому полю типа "дата") получается не один день, как можно ожидать, и как срабатывает при передаче через параметр, а что-то вроде {ts'1901-01-01 00:00:00'} т.е. один ГОД!

X++:
static void JobSQLDateParamTest(Args _args)
{
    LedgerJournalTrans    ljt;
    ;
    select
        //forceliterals
        forceplaceholders
        count(recid) from ljt
            where
                  ljt.Due < ljt.TransDate + 1;
    info(int642str(ljt.Recid));
}
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 14.09.2022 в 16:15.