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

Jak extrahovat nebo převádět časová data z řetězce v SQL Server

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() .


  1. Dělená tabulka Oracle

  2. ZDLRA – RMAN-20035 neplatná vysoká RECID

  3. Zlepšení funkce, kterou UPSERTs zakládá na vstupním poli

  4. Jak najít všechny závislosti tabulky na serveru SQL