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 .