Spójrz na wartość:
'2013-31-01 16:00:40'
To próbuje wykorzystać miesiąc z 31.
Nie jest jasne, czy to tylko oznacza, że Twoje dane testowe są nieprawidłowe, czy też musisz zmienić te wiersze:
SELECT SUBSTRING(DATE,3,2) FROM db.test_table INTO LMONTH;
SELECT SUBSTRING(DATE,1,1) FROM db.test_table INTO LDAY;
do:
SELECT SUBSTRING(DATE,1,2) FROM db.test_table INTO LMONTH;
SELECT SUBSTRING(DATE,4,2) FROM db.test_table INTO LDAY;
Zwróć uwagę na zmianę z 1 na 2 dla podciągu zaczynającego się od 1 i tak zmianę drugiej pozycji początkowej z 3 na 4. Chcesz dwucyfrowych wartości miesiąca i dnia, prawda? Jeśli Twój format danych to faktycznie D/M/RRRR (tj. używanie dwóch cyfr tylko wtedy, gdy są wymagane), wtedy nie będziesz mógł używać stałych pozycji podciągów.