Thank you for your answer!
You presumed right that date contains datetime. However, I have no idea why do you think I use sqlite—I said I have a Pg (i.e. PostgreSQL) database table. :)
The thing is that Pg does not support strftime() function.
So, according to your answer I believe that DBI does not get the selected values (i.e. the output from select distinct cast(...)) or it does not understand/use the cast() function, instead it selects the timestamp value (the actual value) instead of the casted one. Is that right? Is this expected? I believe it is not. And if it is so, I would say it is a bug. What do you think?