you should be using ISNULL() to do that. REPLACE does not work for NULL value.
Anyway, what you wanted is just a presentation issue. You should be handling that in your front end application where the data is being displayed.
If you really want to do it in the T-SQL side, then you should also convert the datetime to a string
select isnull(convert(varchar(10), datecol, 121), '-')
Time is always against us