Мой дубль (обязательно не самый лучший):
DECLARE @val VARCHAR(30)='20110805060028.387'
SELECT LEFT(@val,4) [yyyy], RIGHT(LEFT(@val,6),2)[mm], RIGHT(LEFT(@val,8),2)[dd],
RIGHT(LEFT(@val,10),2)[hh], RIGHT(LEFT(@val,12),2)[mi],
RIGHT(LEFT(@val,14),2)[ss],SUBSTRING(@val, 15,LEN(@val)-14) [ms]
DECLARE @date DATETIME
SELECT @date = CAST(LEFT(@val,4) + '-' + RIGHT(LEFT(@val,6),2) + '-' +
RIGHT(LEFT(@val,8),2) + ' ' + RIGHT(LEFT(@val,10),2) + ':' +
RIGHT(LEFT(@val,12),2) + ':' + RIGHT(LEFT(@val,14),2) +
SUBSTRING(@val, 15,LEN(@val)-14) AS DATETIME)
SELECT @date, DATEPART(MILLISECOND,@date)[ms], DATEPART(MONTH,@date)[MM]