Search code examples
db2ibm-midrange

DB2 for IBM i (iSeries) Date - Need to Compare (Current Date - 1)


I am new to DB2 for IBM i (iSeries) syntax. I would like to compare a date field in a table to yesterday's date (current date - 1) for auditing purposes. However, I cannot get it to work. I receive a "[SQL0182] A date, time, or timestamp expression not valid" error. Any help is greatly appreciated. See code below.

SELECT DECIMAL_FIELD
 FROM SCHEMA.TABLE
  WHERE DATE(INSERT(INSERT(DIGITS(DECIMAL_FIELD), 5, 0, '-'), 8, 0, '-')) > DATE(VARCHAR_FORMAT(TIMESTAMP_ISO(CURRENT DATE), 'YYYY-MM-DD')) - 1
AND DECIMAL_FIELD <> 0

Solution

  • Specify the duration.

    SELECT DECIMAL_FIELD
    FROM SCHEMA.TABLE
    WHERE DATE(INSERT(INSERT(DIGITS(DECIMAL_FIELD), 5, 0, '-'), 8, 0, '-')) >
        DATE(VARCHAR_FORMAT(TIMESTAMP_ISO(CURRENT DATE), 'YYYY-MM-DD')) - 1 DAY
        AND DECIMAL_FIELD <> 0
    

    Also the comparison can be simplified:

    SELECT DECIMAL_FIELD
    FROM SCHEMA.TABLE
    WHERE DATE(INSERT(INSERT(DIGITS(DECIMAL_FIELD), 5, 0, '-'), 8, 0, '-')) >
        CURRENT_DATE - 1 DAY
        AND DECIMAL_FIELD <> 0
    

    Datetime arithmetic in SQL