На самом деле,% EVAL () сработал в вашем примере.:) Не так, как задумано, но вот почему:
Сначала% EVAL () проверяет, могут ли операнды оцениваться как арифметические (только целочисленные) или логические.
Поскольку вы предоставили 2 литерала даты-времени, которые содержали нецелые символы, было выполнено логическое сравнение на основе последовательности сортировки символов.
% SYSEVALF () - как упоминалось ранее - будет работать, потому что, в отличие от% EVAL (), он поддерживает нецелые символы в качестве операндов с дополнительной оценкой.
Так% SYSEVALF () поддерживает арифметику с плавающей запятой, тогда как% EVAL () может поддерживать только целые числа.
Кстати,% EVAL () также используется для вычисления выражений в% IFили оператор% DO и т. д., поэтому литералы даты и времени также не поддерживаются в этих случаях.
Примечание: учитывая вышесказанное, обычно рекомендуется:
- для целого числаарифметика, используйте% EVAL ()
- для арифметики с плавающей запятой, используйте% SYSEVAL ()
- всегда преобразовывать литералы даты и времени в целое число, как в ответе выше, с% sysfunc (inputn (& datetimeliteral), datetimex.))
где x будет меняться в зависимости от литерала даты и времени ...