sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan udtrækkes eller konverteres tidsdata fra en streng i SQL Server

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


  1. Hvordan kan jeg oprette forbindelse til Oracle Database 11g-server gennem ssh-tunnelkæden (dobbelttunnel, server i virksomhedens netværk)?

  2. Cloud Native og DevSecOps i skala med Capgemini Agile Innovation Platform og Oracle Cloud

  3. Hvordan kan jeg skrive SQLite Real-værdier til Java BigDecimal-værdier?

  4. Optimal måde at SLETTE specificerede rækker fra Oracle