Which tool do you use? Is it TOAD or SQL Developer or any similar GUI?
If that's so, switch to good, old SQL*Plus and run the same query without DISTINCT - I presume that you'll get the same INVALID NUMBER error.
Why? Because GUI "fools" users as it returns the first 100, 500 or 1000 rows. None of these raises the INVALID NUMBER error. However, if you force it to return ALL rows (for example, by hitting <Ctrl + End> in TOAD) or - in your case - by using the DISTINCT keyword (as it needs to review all rows returned by query in order to be able to extract only the distinct ones), you'll still hit the same INVALID NUMBER.
That's what SQL*Plus does - it selects all rows, not only a limited subset.
What is the UEL.STARTTIMESTAMP's datatype? Could you use BETWEEN (instead of <= and >=)? The right side is a DATE (why converting it to a string), so - why wouldn't you rather use the same datatype on the left side (i.e. not apply SUBSTR on STARTTIMESTAMP, but TO_DATE)?