Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

convertir varchar (jjmmaaaa) au format de date

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 .