ddmmyyyy
is geen geldig datumformaat. Je moet eerst van die string iets maken dat kan worden geparseerd als een DATE
/ DATETIME
. De snelste manier is misschien om gewoon SUBSTRING
de stukjes in een mm/dd/yyyy
formaat. Dat converteert wel met succes. Maar je hebt een VARCHAR(8)
. U moet dat dus ofwel verhogen om VARCHAR(10)
. te zijn (of beter nog, gewoon CHAR(10)
), of declareer een lokale variabele om de gewijzigde waarde vast te houden.
Bijvoorbeeld:
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
BEWERKEN: Eigenlijk heb ik een iets eenvoudigere manier gevonden. Ik begon met deze methode, maar realiseerde me dat het niet werkte met ddmmyyyy
in tegenstelling tot mmddyyyy
. Ik heb op de een of andere manier gemist dat er een geschikt datumstijlnummer was voor dd/mm/yyyy
. Dus, gewoon twee schuine strepen toevoegen aan de inkomende string en dan CONVERT
. aanroepen werkt wel, maar alleen als je 103
. gebruikt als de "stijl". En net als bij de eerste oplossing, moet de inkomende parameter worden gewijzigd in VARCHAR(10)
of CHAR(10)
in plaats van VARCHAR(8)
, of maak een lokale variabele aan als 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
Conversie "stijlen" zijn te vinden op de MSDN-pagina voor CAST en CONVERT .