Please try this and see if the syntax is valid. DB2's kind of a loner on allowing this type of (easy) syntax, so I'm not super-familiar with it.
SELECT ...
FROM ...
WHERE
((SELECT DAY(CURRENT DATE) AS current_date FROM sysibm.sysdummy1) = 16 AND
(column_date BETWEEN CURRENT DATE - 15 DAYS AND CURRENT DATE - 1 DAY)) OR
((SELECT DAY(CURRENT DATE) AS current_date FROM sysibm.sysdummy1) = 1 AND
(column_date BETWEEN CURRENT DATE - 1 MONTH + 15 DAYS AND CURRENT DATE - 1 DAY))
For testing today, just change one of them to "= 4" rather than "= 16" or "= 1" :-).
Could:
((SELECT DAY(CURRENT DATE) AS current_date FROM sysibm.sysdummy1) = 16 AND
Just be:
(DAY(CURRENT DATE) = 16 AND
Maybe, I wasn't sure. Again, DB2 syntax is rather quirky at times.
Which specific version of DB2: Unix/Linux/AIX, Windows, Z/OS, iSeries, etc.? Sadly, even for something as simple as working with dates, there can be differences depending on the specific db engine version.