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 .