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