UNITS

The UNITS operator converts an integer to an interval.

Syntax

expr UNITS qual[(scale)]
where qual can be one of:
  YEAR
  MONTH
  DAY
  HOUR
  MINUTE
  SECOND
  FRACTION(1-6)
  1. expr is an integer expression.

Usage

The UNITS operator converts an integer expression to an INTERVAL value expressed in a single unit of time that you specify after the UNITS keyword.

For the qualifiers YEAR, MONTH, DAY, HOUR and SECOND, if the left-hand expression evaluates to a decimal number, any fractional part is discarded before the UNITS operator is applied. However, when using UNITS FRACTION, the expression can be a decimal number where the integer part is interpreted as a number of seconds, and the decimal part as the fraction of a second:
MAIN
  DEFINE iv INTERVAL SECOND(9) TO FRACTION(5)
  LET iv = 76242.77999 UNITS FRACTION
  DISPLAY iv  -- Displays "     76242.77999"
END MAIN
The UNITS operator can be used to compare INTERVAL values. For example, to check if an INERVAL SECOND(9) TO SECOND is negative:
FUNCTION is_negative( iv INTERVAL SECOND(9) TO SECOND )
    RETURN (iv < 0 UNITS SECOND )
END FUNCTION

UNITS has a higher precedence than any arithmetic or boolean operator. As a result, a left-hand arithmetic expression that uses a UNITS operator must be enclosed in parentheses. For example, 10 + 20 UNITS MINUTES will be evaluated as 10 + (20 UNITS MINUTES) and give a conversion error. It must be written (10 + 20) UNITS MINUTES to get the expected result.

Because the difference between two DATE values is an integer count of days rather than an INTERVAL data type, you might want to use the UNITS operator to convert such differences explicitly to INTERVAL values:
MAIN
  DEFINE d DATE
  LET d = TODAY + 200
  DISPLAY (d - TODAY) UNITS DAY
END MAIN