Pokud se vám zobrazuje chybová zpráva SQL Server 241, která zní Konverze se nezdařila při převodu data a/nebo času ze znakového řetězce , je to pravděpodobně proto, že se pokoušíte převést řetězec na hodnotu data/času, ale tento konkrétní řetězec nelze převést na hodnotu data/času.
Příklad chyby
Zde je příklad kódu, který způsobuje chybu:
SELECT CAST('Tomorrow' AS date);
Výsledek:
Zpráva 241, úroveň 16, stav 1, řádek 1 Převod se nezdařil při převodu data a/nebo času z řetězce znaků.
Zde jsme se pokusili převést řetězec Tomorrow
k date
zadejte, ale Tomorrow
není platné datum, které lze převést na date
typ.
SQL Server nemůže převést řetězec na date
a tak to vrátilo chybu.
Řešení 1
Nejviditelnějším způsobem, jak to opravit, je změnit řetězec tak, aby se podobal skutečnému datu.
Pokud procházíte kolonou, zkontrolujte, zda máte správný sloupec. Totéž platí, pokud předáváte proměnnou – zkontrolujte, zda se jedná o správnou proměnnou.
Například následující převod je úspěšný:
SELECT CAST('20 Feb 2030' AS date);
Výsledek:
20. 2. 2030
V závislosti na formátu vstupního data může být lepší použít CONVERT()
funkci, abyste mohli určit formát výrazu vstupního data.
Příklad:
SELECT
CONVERT(date, '03/02/2030', 101) AS 'US with century',
CONVERT(date, '03/02/30', 1) AS 'US without century',
CONVERT(date, '03/02/2030', 103) AS 'British with century',
CONVERT(date, '03/02/30', 3) AS 'US without century';
Výsledek:
+-------------------+----------------------+--- ---------------------+----------------------+| USA se stoletím | USA bez století | Britové se stoletím | USA bez století ||-------------------+----------------------+-- ----------------------+----------------------|| 2030-03-02 | 2030-03-02 | 2030-02-03 | 2030-02-03 |+------------------+----------------------+ ------------------------+----------------------+Řešení 2
Dalším způsobem, jak se s chybou vypořádat, je použít buď
TRY_CAST()
neboTRY_CONVERT()
. Tyto funkce vrátíNULL
místo chyby.Příklad:
SELECT TRY_CAST('Tomorrow' AS date);
Výsledek:
NULLTo však nutně neřeší základní problém, pouze jej skrývá. Konverze stále nemohla proběhnout.
V každém případě to může být stále životaschopná možnost, v závislosti na vašich potřebách.
Řešení 3
Dalším způsobem, jak se s chybou vypořádat, je převod řetězce na jiný datový typ. Je zřejmé, že to není dobré, pokud chcete skončit s
date
typ, ale chyba možná vznikla proto, že jste omylem zadalidate
zadejte místo druhého typu.Příklad:
SELECT CAST('Wednesday' AS char(3));
Výsledek:
St