sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man extraherar eller konverterar tidsdata från en sträng i SQL Server

Problem:

Du vill konvertera en sträng som innehåller ett datum och en tid till ett TIME-värde i SQL Server.

Vi måste konvertera en sträng som innehåller ett veckodagsnamn, datum och tid till ett TIME-värde.

Lösning 1:

Vi använder PARSE() fungera. Här är frågan du skulle skriva:

SELECT 
  PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) 
  AS time_value;

Här är resultatet:

11:23:11.1134505

Diskussion:

Använd PARSE() funktion för att konvertera en sträng som innehåller ett veckodagsnamn, datum och tid till datatypen TIME. Denna funktion tar strängen för att konvertera, nyckelordet AS och en ny datatyp (i vårt exempel, TIME ). Strängen bör innehålla ett värde som representerar denna datatyp. I vårt exempel är strängen 'February 2, 2020 11:23:11.1134505' lagrar ett tidsvärde.

Observera att tiden bara är en del av denna sträng, som också innehåller namnet på veckodagen. Använd inte CONVERT() eller CAST() funktioner i detta fall; de returnerar också en TIME-datatyp, men utan veckodag.

Om du använder ett talat språk som skiljer sig från serverspråket, inkludera nyckelordet USING och lämplig kulturkod. För det polska språket skulle du skriva:

SELECT 
  PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) 
  AS time_value;

För mer om kulturparametervärden, se den officiella SQL Server-dokumentationen.

I det här fallet bör du använda PARSE() funktion, även om den inte har den bästa prestandan. Om du använder en sträng som representerar ett tidsvärde som inte gör det lagra ytterligare data (som namnet på veckodagen), använd CASE() fungera. Här är ett exempel.

Lösning 2:

SELECT 
  CAST('2 February 2020 11:23:11.1134505' AS TIME ) 
  AS time_value;

Här är resultatet:

11:23:11.1134505

Strängen som innehåller datum och tid som ska konverteras måste vara i formatet T-SQL datum- och tidsdatatyp. Du kan läsa mer i SQL Server-dokumentationen.

CAST() funktionen är ANSI SQL Standard och dess prestanda är bättre än CONVERT() eller PARSE() .

Slutligen kan du också använda CONVERT() fungera. Titta på nästa exempel.

Lösning 3:

  SELECT 
  CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') 
  AS time_value;

Resultatet:

11:23:11.1134505

CONVERT() funktion tar tre argument:den nya datatypen, strängen som ska konverteras och det (valfria) önskade formatet. Du bör dock bara använda den här funktionen om du behöver ange hur datum- och tidsdata ska formateras, eftersom dess prestanda inte är lika bra som CAST() .


  1. Framtiden för Postgres-XL

  2. SQLite-databasläcka hittades

  3. SQL Server pivot kontra multipel koppling

  4. Brott mot UNIQUE KEY-begränsning på INSERT WHERE COUNT(*) =0 på SQL Server 2005