Problem:
Du vil gerne konvertere en streng, der indeholder en dato og et klokkeslæt, til en TIME-værdi i SQL Server.
Vi skal konvertere en streng, der indeholder et ugedagsnavn, dato og klokkeslæt til en TIME-værdi.
Løsning 1:
Vi bruger PARSE()
fungere. Her er den forespørgsel, du ville skrive:
SELECT PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Her er resultatet:
11:23:11.1134505
Diskussion:
Brug PARSE()
funktion til at konvertere en streng indeholdende et ugedagsnavn, dato og klokkeslæt til datatypen TIME. Denne funktion tager strengen til at konvertere, søgeordet AS og en ny datatype (i vores eksempel, TIME
). Strengen skal indeholde en værdi, som repræsenterer denne datatype. I vores eksempel er strengen 'February 2, 2020 11:23:11.1134505'
gemmer en tidsværdi.
Bemærk, at klokkeslættet kun er en del af denne streng, som også indeholder navnet på ugedagen. Brug ikke CONVERT()
eller CAST()
funktioner i dette tilfælde; de returnerer også en TIME-datatype, men uden ugedag.
Hvis du bruger et talesprog, der er forskelligt fra serversproget, skal du inkludere søgeordet USING og den relevante kulturkode. For det polske sprog vil du skrive:
SELECT PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) AS time_value;
For mere om kulturparameterværdier, se den officielle SQL Server-dokumentation.
I dette tilfælde skal du bruge PARSE()
funktion, selvom den ikke har den bedste ydeevne. Hvis du opererer på en streng, der repræsenterer en tidsværdi, som ikke gør gemme yderligere data (som navnet på ugedagen), brug CASE()
fungere. Her er et eksempel.
Løsning 2:
SELECT CAST('2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Her er resultatet:
11:23:11.1134505
Strengen, der indeholder datoen og klokkeslættet, der skal konverteres, skal være i formatet T-SQL dato- og klokkeslætsdatatypen. Du kan læse mere i SQL Server-dokumentationen.
CAST()
funktionen er ANSI SQL Standard og dens ydeevne er bedre end CONVERT()
eller PARSE()
.
Endelig kan du også bruge CONVERT()
fungere. Se på det næste eksempel.
Løsning 3:
SELECT CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') AS time_value;
Resultatet:
11:23:11.1134505
CONVERT()
funktion tager tre argumenter:den nye datatype, strengen, der skal konverteres, og det (valgfrit) ønskede format. Du bør dog kun bruge denne funktion, hvis du skal angive, hvordan dato- og klokkeslætsdataene skal formateres, fordi dens ydeevne ikke er så god som CAST()
.