sql >> Databáze >  >> RDS >> Sqlserver

převést varchar(ddmmyyyy) do formátu data

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 .




  1. Chyba typu příkazu Nested Case (postgres)

  2. Spring Hibernate získat vybrané sloupce

  3. dynamické sloupce pomocí dotazu kontingenční tabulky

  4. Nekonečná smyčka v CTE při analýze samoodkazovací tabulky