If you're comparing two different datatypes (in your case - date
columns and string literals), you shouldn't rely on the database to convert them. As you saw in your usecase, you got the dates converted to strings, and compared lexicographically. Instead, you should explicitly convert your literals to date
s, and make all comparisons on that data type:
SELECT *
FROM my_table
WHERE arrivaldate >= STR_TO_DATE('01-01-2013', '%D-%M-%Y')
AND departdate <= STR_TO_DATE('15-02-2014', '%D-%M-%Y')