ddmmyyyy
n'est pas un format de date valide. Vous devez d'abord transformer cette chaîne en quelque chose qui peut être analysé en tant que DATE
/ DATETIME
. Le moyen le plus rapide pourrait être de simplement SUBSTRING
les pièces dans un mm/dd/yyyy
format. Cela convertit avec succès. Mais vous avez un VARCHAR(8)
. Donc, vous devez soit augmenter cela pour être VARCHAR(10)
(ou mieux encore, juste CHAR(10)
), ou déclarez une variable locale pour contenir la valeur modifiée.
Par exemple :
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
MODIF : En fait, j'ai trouvé un moyen un peu plus simple. J'ai commencé avec cette méthode mais j'ai réalisé qu'elle ne fonctionnait pas avec ddmmyyyy
par opposition à mmddyyyy
. J'ai en quelque sorte raté qu'il y avait un numéro de style de date approprié pour mm/dd/yyyy
. Donc, ajoutez simplement deux barres obliques à la chaîne entrante, puis appelez CONVERT
fonctionne, mais seulement si vous utilisez 103
comme "style". Et comme la première solution, il faut soit changer le paramètre entrant pour être VARCHAR(10)
ou CHAR(10)
au lieu de VARCHAR(8)
, ou en créant une variable locale pour être 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
Les "styles" de conversion peuvent être trouvés sur la page MSDN pour CAST et CONVERT .