ddmmyyyy
není platný formát data. Nejprve musíte z tohoto řetězce udělat něco, co lze analyzovat jako DATE
/ DATETIME
. Nejrychlejší způsob může být jednoduše SUBSTRING
kousky do mm/dd/yyyy
formát. To se úspěšně převádí. Ale máte VARCHAR(8)
. Takže to musíte buď zvýšit, aby bylo VARCHAR(10)
(nebo ještě lépe jen CHAR(10)
), nebo deklarujte lokální proměnnou, která bude uchovávat změněnou hodnotu.
Například:
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
UPRAVIT: Vlastně jsem našel trochu jednodušší způsob. Začal jsem s touto metodou, ale uvědomil jsem si, že nefunguje s ddmmyyyy
na rozdíl od mmddyyyy
. Nějak mi uniklo, že pro dd/mm/yyyy
existuje vhodné číslo stylu data . Jednoduše tedy přidejte dvě lomítka k příchozímu řetězci a poté zavolejte CONVERT
funguje, ale pouze pokud používáte 103
jako "styl". A stejně jako první řešení vyžaduje buď změnu vstupního parametru na VARCHAR(10)
nebo CHAR(10)
místo VARCHAR(8)
, nebo vytvořením lokální proměnné 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
Konverzní "styly" lze nalézt na stránce MSDN pro CAST a CONVERT .