SQL Server может неявно приводить строки в форме «ГГГГММДД» к дате и времени - все остальные строки должны быть явно приведены. Вот два блока быстрого кода, которые будут выполнять преобразование из формы, о которой вы говорите:
версия 1 использует единичные переменные:
BEGIN
DECLARE @input VARCHAR(8), @mon CHAR(2),
@day char(2), @year char(4), @output DATETIME
SET @input = '10022009' --today's date
SELECT @mon = LEFT(@input, 2), @day = SUBSTRING(@input, 3,2), @year = RIGHT(@input,4)
SELECT @output = @year+@mon+@day
SELECT @output
END
версия 2 не использует единичные переменные:
BEGIN
DECLARE @input CHAR(8), @output DATETIME
SET @input = '10022009' --today's date
SELECT @output = RIGHT(@input,4) + SUBSTRING(@input, 3,2) + LEFT(@input, 2)
SELECT @output
END
В обоих случаях используется способность сервера SQL Server выполнять это неявное преобразование.