ddmmyyyy
är inte ett giltigt datumformat. Du måste först göra den strängen till något som kan tolkas som en DATE
/ DATETIME
. Det snabbaste sättet kan vara att helt enkelt SUBSTRING
bitarna till en mm/dd/yyyy
formatera. Det konverterar framgångsrikt. Men du har en VARCHAR(8)
. Så du måste antingen öka det för att vara VARCHAR(10)
(eller ännu bättre, bara CHAR(10)
), eller deklarera en lokal variabel för att hålla det ändrade värdet.
Till exempel:
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
EDIT: Jag hittade faktiskt ett lite enklare sätt. Jag började med den här metoden men insåg att den inte fungerade med ddmmyyyy
i motsats till mmddyyyy
. Jag missade på något sätt att det fanns ett passande datumstilsnummer för dd/mm/yyyy
. Så, helt enkelt lägga till två snedstreck till den inkommande strängen och sedan anropa CONVERT
fungerar, men bara om du använder 103
som "stilen". Och precis som den första lösningen kräver den antingen att den inkommande parametern ändras till att vara VARCHAR(10)
eller CHAR(10)
istället för VARCHAR(8)
, eller skapa en lokal variabel som ska vara 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
Konvertering "stilar" finns på MSDN-sidan för CAST och CONVERT a> .