Problém:
Chcete převést řetězec obsahující datum a čas na hodnotu TIME v SQL Server.
Potřebujeme převést řetězec obsahující název dne v týdnu, datum a čas na hodnotu TIME.
Řešení 1:
Použijeme PARSE()
funkce. Zde je dotaz, který byste napsali:
SELECT PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Zde je výsledek:
11:23:11.1134505
Diskuse:
Použijte PARSE()
převede řetězec obsahující název dne v týdnu, datum a čas na datový typ TIME. Tato funkce vyžaduje převod řetězce, klíčového slova AS a nového datového typu (v našem příkladu TIME
). Řetězec by měl obsahovat hodnotu, která představuje tento datový typ. V našem příkladu je řetězec 'February 2, 2020 11:23:11.1134505'
ukládá časovou hodnotu.
Všimněte si, že čas je pouze částí tohoto řetězce, který také obsahuje název dne v týdnu. Nepoužívejte CONVERT()
nebo CAST()
funkce v tomto případě; také vrátí datový typ TIME, ale bez dne v týdnu.
Pokud používáte mluvený jazyk, který se liší od jazyka serveru, uveďte klíčové slovo USING a příslušný kód kultury. Pro polský jazyk byste napsali:
SELECT PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) AS time_value;
Další informace o hodnotách parametrů kultury naleznete v oficiální dokumentaci k serveru SQL.
V tomto případě byste měli použít PARSE()
funkce, i když nemá nejlepší výkon. Pokud pracujete s řetězcem představujícím časovou hodnotu, není uložit další data (např. název dne v týdnu), použijte CASE()
funkce. Zde je příklad.
Řešení 2:
SELECT CAST('2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Zde je výsledek:
11:23:11.1134505
Řetězec obsahující datum a čas pro převod musí být ve formátu datového typu T-SQL datum a čas. Více si můžete přečíst v dokumentaci k SQL Serveru.
CAST()
funkce je ANSI SQL Standard a její výkon je lepší než CONVERT()
nebo PARSE()
.
Nakonec můžete také použít CONVERT()
funkce. Podívejte se na další příklad.
Řešení 3:
SELECT CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') AS time_value;
Výsledek:
11:23:11.1134505
CONVERT()
funkce přebírá tři argumenty:nový datový typ, řetězec, který se má převést, a (volitelný) požadovaný formát. Tuto funkci byste však měli používat pouze v případě, že potřebujete určit, jak mají být data a čas formátována, protože její výkon není tak dobrý jako CAST()
.