Проверьте, что ваше приведение должно быть приведение (столбец как тип данных) , а также учитывайте больше, чем равно "> =" и меньше, чем "<=" </strong> il_guru сказал. :)
Проверьте это ...
SELECT [travel], [service], [travelid], [fro_m], [t_o], [dep], [arr],
[booking_closed], [discount], [faresleeper], [rating], [seats], [s_no],
[fare] = CASE WHEN @date >= Cast(Convert(varchar(20),s1from,101) as datetime)
AND @date <= Cast(Convert(varchar(20),s1to,101) as datetime)
THEN s1rate ELSE fare END
FROM a1_volvo
-- use this where clause if fro_m and t_o are not datetime
WHERE (fro_m = @fro_m ) AND ( t_o = @t_o )
-- else use this where clause if fro_m and t_o have datetime of datatypes
WHERE ( Cast(Convert(varchar(20),fro_m,101) as datetime) = @fro_m )
AND ( Cast(Convert(varchar(20),t_o,101) as datetime) = @t_o )