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-YEAR20.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.