Intrinsic Functions

Functions return a value of a specific type (alphanumeric, numeric, integer) and can be used wherever an identifier of that type is allowed (not as a receiving field).

20.1 Calling functions

Functions return a value of a specific type (alphanumeric, numeric, integer) and can be used wherever an identifier of that type is allowed (not as a receiving field). (ALL) passes every occurrence of a table. With the FUNCTION ALL INTRINSIC clause in the REPOSITORY paragraph (COBOL 2002; supported by GnuCOBOL), the FUNCTION keyword can be omitted.

MOVE FUNCTION UPPER-CASE(WS-NAME) TO WS-NAME-UPPER
           COMPUTE WS-ROOT = FUNCTION SQRT(WS-VALUE)
           COMPUTE WS-BIGGEST = FUNCTION MAX(WS-A WS-B WS-C)
           COMPUTE WS-TOTAL = FUNCTION SUM(WS-SALES(ALL))

20.2 Function reference

CURRENT-DATE, WHEN-COMPILED, INTEGER-OF-DATE, DATE-OF-INTEGER, INTEGER-OF-DAY, DAY-OF-INTEGER, DATE-TO-YYYYMMDD, DAY-TO-YYYYDDD, YEAR-TO-YYYY, TEST-DATE-YYYYMMDD, FORMATTED-DATE, FORMATTED-TIME, FORMATTED-DATETIME, SECONDS-PAST-MIDNIGHT

UPPER-CASE, LOWER-CASE, REVERSE, TRIM, LENGTH, ORD, CHAR, DISPLAY-OF, NATIONAL-OF

NUMVAL, NUMVAL-C (with currency/commas), NUMVAL-F (floating), TEST-NUMVAL, TEST-NUMVAL-C, HEX-OF, HEX-TO-CHAR, BIT-OF, BIT-TO-CHAR (IBM 6.3+)

ABS, SQRT, EXP, EXP10, LOG, LOG10, SIN, COS, TAN, ASIN, ACOS, ATAN, PI, E, FACTORIAL, INTEGER, INTEGER-PART, MOD, REM, SIGN, RANDOM

MAX, MIN, ORD-MAX, ORD-MIN, SUM, MEAN, MEDIAN, MIDRANGE, RANGE, VARIANCE, STANDARD-DEVIATION ANNUITY, PRESENT-VALUE

ULENGTH, USUBSTR (IBM UTF-8), E, RANDOM, MODULE-NAME (GnuCOBOL)

20.3 CURRENT-DATE

FUNCTION CURRENT-DATE returns 21 characters: YYYYMMDDHHMMSShh+hhmm (date, time to hundredths, offset from UTC).

01  WS-CURRENT-DATE-DATA.
           05  WS-CD-DATE.
               10  WS-CD-YEAR      PIC 9(4).
               10  WS-CD-MONTH     PIC 99.
               10  WS-CD-DAY       PIC 99.
           05  WS-CD-TIME.
               10  WS-CD-HOUR      PIC 99.
               10  WS-CD-MINUTE    PIC 99.
               10  WS-CD-SECOND    PIC 99.
               10  WS-CD-HUNDREDTH PIC 99.
           05  WS-CD-GMT-OFFSET    PIC X(5).
      * ...
           MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE-DATA
           DISPLAY "Today is " WS-CD-DAY "/" WS-CD-MONTH "/" WS-CD-YEAR

20.4 Date arithmetic

INTEGER-OF-DATE converts YYYYMMDD to a day number (days since 31 December 1600), making date math simple:

Output: Days between: 344, Due date : 20260214, Day of week : 4 (15 January 2026 is a Thursday).

IDENTIFICATION DIVISION.
       PROGRAM-ID. DATECALC.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-START-DATE     PIC 9(8) VALUE 20260115.
       01  WS-END-DATE       PIC 9(8) VALUE 20261225.
       01  WS-DAYS           PIC S9(7).
       01  WS-DUE-DATE       PIC 9(8).
       01  WS-DOW            PIC 9.
       01  ED-DAYS           PIC -(6)9.
       PROCEDURE DIVISION.
           COMPUTE WS-DAYS = FUNCTION INTEGER-OF-DATE(WS-END-DATE)
                           - FUNCTION INTEGER-OF-DATE(WS-START-DATE)
           MOVE WS-DAYS TO ED-DAYS
           DISPLAY "Days between: " FUNCTION TRIM(ED-DAYS)
      *    Due date = start + 30 days
           COMPUTE WS-DUE-DATE = FUNCTION DATE-OF-INTEGER(
                   FUNCTION INTEGER-OF-DATE(WS-START-DATE) + 30)
           DISPLAY "Due date    : " WS-DUE-DATE
      *    Day of week: 1 = Monday ... 7 = Sunday
           COMPUTE WS-DOW = FUNCTION MOD(
                   FUNCTION INTEGER-OF-DATE(WS-START-DATE) - 1, 7) + 1
           DISPLAY "Day of week : " WS-DOW
           IF FUNCTION TEST-DATE-YYYYMMDD(WS-END-DATE) = 0
               DISPLAY "End date is valid"
           END-IF
           STOP RUN.

20.5 Validating numeric text

FUNCTION TEST-NUMVAL(WS-INPUT) returns 0 when the text is a valid number for NUMVAL (otherwise the position of the first bad character), so test it before converting; FUNCTION NUMVAL-C("$1,234.56") also accepts currency signs and commas.