Jak opravit & lsquo; převod selhal při převodu data a / nebo času z řetězce znaků & rsquo; Chyba?

Existuje mnoho případů, kdy se data a časy nezobrazí ve formátu, který chcete, ani výstup dotazu neodpovídá potřebám diváků. Existuje několik vestavěných funkcí serveru SQL Server pro formátování řetězce data podle vašich potřeb, ale aby byl řetězec interpretován serverem SQL Server a aby se předešlo chybám při převodu, měl by být ve správném formátu. Když se pokusíme převést datum nebo čas z řetězce znaků, někdy dojde k chybě. "Převod se nezdařil při převodu data a / nebo času z řetězce znaků."

chyba převodu data a času

Výše uvedená chyba obvykle vzniká, když datový literál není správný a nelze jej převést z řetězce na DateTime nebo date. Výsledkem této chyby je řada důvodů, které si podrobně rozebereme spolu se sadou řešení.

Příklad 1:

Velká Británie Zápis data a času zobrazuje datum ve formátu den-měsíc-rok (10. ledna 2015 nebo 1. 1. 2015), čehož můžeme dosáhnout pomocí funkce SQL Server built_in funkce „převést“ stylem formátování 103.

Tady v níže uvedeném příkladu vidíme, že zadaný řetězec data je ve špatném formátu. Nejprve poskytuje měsíc, poté dny a poslední rok, což je špatné a nemůže být interpretováno serverem SQL, což má za následek chybu. Správný formát pro převod data stylu ve Velké Británii pomocí stylu data „103“ je „dd / mm / rrrr“.

Špatný formát:

Deklarovat @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'vyberte CONVERT (datetime2, @date_time_value, 103) jako UK_Date_Time_Style

Správný formát:

Britský a francouzský formát data je 103 = „dd / mm / rrrr“ nebo 3 = „dd / mm / rrr“. Zde 103 a 3 jsou styly dat.

Deklarovat @date_time_value varchar (100) = '10 / 1/15 21:02:04 'vyberte CONVERT (datetime2, @date_time_value, 103) jako Date_Time_Style
Deklarovat @date_time_value varchar (100) = '10 / 1/15 21:02:04 'vyberte CONVERT (datetime2, @date_time_value, 3) jako UK_Date_Time_Style

Příklad 2:

Převod řetězce na datum na serveru SQL někdy vede k chybě, nikoli kvůli použitým formátům data nebo času, ale spíše proto, že se pokoušíte uložit nesprávné informace, které nejsou pro schéma přijatelné.

Špatné datum:

Důvodem následující chyby je pouze to, že v roce 2019 neexistuje datum jako „29. února“, protože se nejedná o přestupný rok.

Deklarovat @date_time_value varchar (100) = '2019-02-29 21:02:04' vybrat cast (@date_time_value jako datetime2) jako date_time_value

Správný:

Deklarovat @date_time_value varchar (100) = '2019-02-28 21:02:04' vyberte cast (@date_time_value jako datetime2) jako date_time_value

Formát data ISO 8601:

Ačkoli pro manipulaci s hodnotami dat je k dispozici řada formátů, při práci s globální / mezinárodní hromadou může být problém s použitelností reprezentace datetime. Je tedy třeba se vyhnout literálům data a času specifickým pro danou kulturu. Pokud vezmeme v úvahu toto datum „3. 8. 2018“, bude v různých regionech světa interpretováno různými způsoby.

  • Ve stylu Velké Británie je interpretován jako „8. března 2018“
  • V evropském stylu je interpretován jako „3. srpna 2018“

Naštěstí existuje jedna alternativa v mezinárodním formátu data vyvinutém ISO. Globální standard ISO 8601 ve formátu „RRRR-MM-DDThh: mm: ss“ je jazykově nezávislejší volbou pro řetězcové literály a řeší všechny tyto problémy. Zatímco „rrrr“ je rok, „mm“ je měsíc a „dd“ je den. Datum „8. března 2018“ v mezinárodním formátu ISO je tedy napsáno jako „2018-03-08“. Formát ISO je tedy nejlepší volbou pro zobrazení data.

Deklarovat @date_time_value varchar (100) = '2019-03-28 21:02:04' vyberte převést (datetime2, @ date_time_value, 126) jako [rrrr-mm-ddThh: mi: ss.mmm]

Doporučení:

Doufejme, že tento článek pomůže zmírnit zmatek, který jsem v komunitě často viděl ohledně hodnot data a času. Doporučuje se však nikdy neukládat data do textového typu (varchar, char, nvarchar, nchar nebo text) Vždy ukládat hodnotu data do sloupců typu DATE, DATETIME a nejlépe DATETIME2 (poskytuje přesnější) a ponechat formátování informací o datu místo načtení z databáze do vrstvy uživatelského rozhraní.

Doporučená

Oprava: Minecraft neodpovídá
Co je aplikace pro registraci zařízení digitální televize a měla by být odstraněna?
Co je FileRepMalware a měli byste jej odebrat