Unless month and week are the same things, you're wrong: { "Unit" : "Weeks", "Time Difference" : "3554 weeks from now" }, { "Unit" : "Months", "Time Difference" : "3554 months from now" }, --- With respect to the original question, you're ignoring the funny stuff: the conditionals. --- IF DateTo IS NOT NULL THEN SET @DateTo = (SELECT CASE WHEN DateTo = '' THEN NOW() ELSE CAST(DateTo AS DATETIME) END); ELSE SET @DateTo = NOW(); I'd go for something like SET DateTo = COALESCE(DateTo, ''); SET @DateTo = (SELECT CASE WHEN DateTo = '' THEN NOW() ELSE CAST(DateTo AS DATETIME) END); However, passing date as string seems broken to me, at least when you want to call it from program. It puts you on the mercy of formatting/parsing issues and locales and timezones (unless your server is collocated and properly set up) and what else. --- That all said, I gladly repeat myself: I find the idea perverted, because of - the need to have some DB around - inefficiency (round trip to DB) - exposing yourself to various DB quirks