ddmmyyyy
non è un formato di data valido. Devi prima trasformare quella stringa in qualcosa che possa essere analizzato come DATE
/ DATETIME
. Il modo più rapido potrebbe essere semplicemente SUBSTRING
i pezzi in un mm/dd/yyyy
formato. Che converte con successo. Ma hai un VARCHAR(8)
. Quindi devi aumentare che sia VARCHAR(10)
(o meglio ancora, solo CHAR(10)
), o dichiarare una variabile locale per contenere il valore alterato.
Ad esempio:
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
MODIFICA: In realtà, ho trovato un modo leggermente più semplice. Ho iniziato con questo metodo ma mi sono reso conto che non funzionava con ddmmyyyy
al contrario di mmddyyyy
. In qualche modo mi sono perso il fatto che esistesse un numero di stile di data appropriato per dd/mm/yyyy
. Quindi, semplicemente aggiungendo due barre alla stringa in arrivo e quindi chiamando CONVERT
funziona, ma solo se usi 103
come lo "stile". E come la prima soluzione, richiede la modifica del parametro in entrata in modo che sia VARCHAR(10)
o CHAR(10)
invece di VARCHAR(8)
o creando una variabile locale che sia 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
Gli "stili" di conversione sono disponibili nella pagina MSDN per CAST e CONVERT .