DECLARE @s TABLE([date] VARCHAR(20));
INSERT @s SELECT '200603010929';
UPDATE @s SET [date] = CONVERT(CHAR(16), CONVERT(SMALLDATETIME,
LEFT([date],4) + SUBSTRING([date],7,2) + SUBSTRING([date],5,2)
+ ' ' + STUFF(RIGHT([date],4),3,0,':')), 120);
SELECT [date], CONVERT(SMALLDATETIME, [date]) FROM @s;
If it is, in fact, YYYYMMDD, then it is slightly simpler:
DECLARE @s TABLE([date] VARCHAR(20));
INSERT @s SELECT '200603010929';
UPDATE @s SET [date] = CONVERT(CHAR(16), CONVERT(SMALLDATETIME,
LEFT([date],8) + ' ' + STUFF(RIGHT([date],4),3,0,':')), 120);
SELECT [date], CONVERT(SMALLDATETIME, [date]) FROM @s;