ddmmyyyy
er ikke et gyldigt datoformat. Du skal først lave den streng til noget, der kan parses som en DATE
/ DATETIME
. Den hurtigste måde kan være blot at SUBSTRING
brikkerne til en mm/dd/yyyy
format. Det konverterer med succes. Men du har en VARCHAR(8)
. Så du skal enten øge det til at være VARCHAR(10)
(eller endnu bedre, bare CHAR(10)
), eller erklære en lokal variabel til at holde den ændrede værdi.
For eksempel:
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: Faktisk fandt jeg en lidt enklere måde. Jeg startede med denne metode, men indså, at den ikke virkede med ddmmyyyy
i modsætning til mmddyyyy
. Jeg savnede på en eller anden måde, at der var et passende datostilnummer for dd/mm/yyyy
. Så du skal blot tilføje to skråstreger til den indgående streng og derefter kalde CONVERT
virker, men kun hvis du bruger 103
som "stilen". Og ligesom den første løsning kræver det enten at ændre den indgående parameter til at være VARCHAR(10)
eller CHAR(10)
i stedet for VARCHAR(8)
, eller oprette en lokal variabel til at være 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 "styles" kan findes på MSDN-siden for CAST og CONVERT a> .