Вероятно, выходит за пределы допустимых значений smalldatetime
С 1 января 1900 года по 6 июня 2079 года
РЕДАКТИРОВАТЬ При ближайшем рассмотрении я думаю, что параметры подстроки для второй части времени могут быть неправильными (что может быть целой проблемой), обновлены ниже для отражения подстроки (timecol, 3, 2)
Новый подход этот sql предполагает, что все даты имеют длину 8 символов, а время - 4.
Select SubString(DateCol, 1, 4) as tehYear,
Substring(DateCol, 5,2) as tehMonth,
SubString(DateCol, 7,2) as tehDay,
SubString(TimeCol, 1,2) as tehHour,
Substring(TimeCOl, 3,4) as tehMinute,
*
from OldTable
where
(SubString(DateCol, 1,4) > 9999 or SubString(DateCol, 1,4) < 1753)
OR (Substring(DateCol, 5,2) > 12 or Substring(DateCol, 5,2) < 1)
OR (SubString(DateCol, 7,2) > 31 or SubString(DateCol, 7,2) < 1)
OR (SubString(TimeCol, 1,2) > 23 or(SubString(TimeCol, 1,2) < 0)
OR (Substring(TimeCOl, 3,4) > 59 or Substring(TimeCOl, 3,4) <0)
Попробуйте привести к дате и посмотреть, есть ли какие-либо даты, выходящие за пределы этого диапазона, чтобы идентифицировать ваши проблемы.
SELECT
CAST((datecol + ' ' + substring(timecol, 1, 2) + ':' + substring(timecol, 3, 2))
as datetime)
FROM OldTable
Where CAST((datecol + ' ' + substring(timecol, 1, 2)
+ ':' + substring(timecol, 3, 2)) as datetime)
> Cast('06/06/2079' as datetime) or CAST((datecol + ' '
+ substring(timecol, 1, 2) + ':' + substring(timecol, 3, 2)) as datetime)
< Cast('01/01/1900' as datetime)