ddmmyyyy не е валиден формат за дата. Първо трябва да превърнете този низ в нещо, което може да бъде анализирано като DATE / DATETIME . Най-бързият начин може да бъде просто SUBSTRING частите в mm/dd/yyyy формат. Това се преобразува успешно. Но вие имате VARCHAR(8) . Така че или трябва да увеличите това до VARCHAR(10) (или още по-добре, просто CHAR(10) ), или декларирайте локална променлива за съхранение на променената стойност.
Например:
DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';
DECLARE @Date2 CHAR(10);
SET @Date2 = SUBSTRING(@Date, 3, 2)
+ '/' + SUBSTRING(@Date, 1, 2)
+ '/' + SUBSTRING(@Date, 5, 4);
SELECT @Date2, CONVERT(DATE, @Date2);
-- 03/25/2014 2014-03-25
РЕДАКТИРАНЕ: Всъщност намерих малко по-прост начин. Започнах с този метод, но разбрах, че не работи с ddmmyyyy за разлика от mmddyyyy . Някак си пропуснах, че има подходящ номер на стил на дата за dd/mm/yyyy . И така, просто добавяне на две наклонени черти към входящия низ и след това извикване на CONVERT работи, но само ако използвате 103 като "стил". И подобно на първото решение, то изисква или промяна на входящия параметър да бъде VARCHAR(10) или CHAR(10) вместо VARCHAR(8) , или създаване на локална променлива, която да бъде CHAR(10) .
DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';
DECLARE @Date2 CHAR(10);
SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/');
SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy
-- 25/03/2014 2014-03-25
„Стилове“ за преобразуване могат да бъдат намерени на страницата на MSDN за CAST и CONVERT .