Задача
Вы хотите, чтобы строка интерпретировалась как значение времени.
Решение
Используйте строку в контексте времени, чтобы дать MySQL понять, как вы бы хотели ее интерпретировать.
Обсуждение
Если вам нужно заставить MySQL интерпретировать строку как дату или время, используйте ее в выражении, которое, не изменяя значения, создает временной контекст. Например, вы не можете добавить ноль к строковому литералу TIME, инициируя преобразование времени в число, но если использовать функции TIME_TO_SEC() и SEC_TO_TIME(), то такая возможность появится:
mysql> SELECT SEC_TO_TIME(TIME_TO_SEC('12:30:45'))+0;
+------------------------------------------------------+
| SEC_TO_TIME(TIME_TO_SEC('12:30:45'))+0 |
+------------------------------------------------------+
| 123045 |
+------------------------------------------------------+
Преобразование значения в секунды и обратно не изменяет его, но заставляет MySQL воспринимать результат как значение типа TIME. Для значений дат делаем то же самое, только используем функции TO_DAYS() и FROM_DAYS():
mysql> SELECT '1999-01-01'+0, FROM_DAYS(TO_DAYS('1999-01-01'))+0;
+----------------+----------------------------------------------------+
| '1999-01-01'+0 | FROM_DAYS(TO_DAYS('1999-01-01'))+0 |
+----------------+----------------------------------------------------+
| 1999 | 19990101 |
+----------------+----------------------------------------------------+
Для интерпретации строк форматов DATETIME и TIMESTAMP можно прибегнуть к помощи функции DATE_ADD():
mysql> SELECT
-> DATE_ADD('1999-01-01 12:30:45',INTERVAL 0 DAY)+0 AS 'numeric datetime',
-> DATE_ADD('19990101123045',INTERVAL 0 DAY)+0 AS 'numeric timestamp';
+---------------------+----------------------+
| numeric datetime | numeric timestamp |
+---------------------+----------------------+
| 19990101123045 | 19990101123045 |
+---------------------+----------------------+