sql >> Database >  >> RDS >> Sqlserver

Hoe tijdgegevens uit een tekenreeks in SQL Server te extraheren of om te zetten?

Probleem:

U wilt een string met een datum en tijd converteren naar een TIME-waarde in SQL Server.

We moeten een tekenreeks met een naam, datum en tijd van de weekdag converteren naar een TIJD-waarde.

Oplossing 1:

We gebruiken de PARSE() functie. Dit is de vraag die je zou schrijven:

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

Hier is het resultaat:

11:23:11.1134505

Discussie:

Gebruik de PARSE() functie om een ​​tekenreeks met een naam, datum en tijd van de weekdag om te zetten in het gegevenstype TIME. Deze functie neemt de tekenreeks die moet worden geconverteerd, het trefwoord AS en een nieuw gegevenstype (in ons voorbeeld TIME ). De tekenreeks moet een waarde bevatten die dit gegevenstype vertegenwoordigt. In ons voorbeeld is de string 'February 2, 2020 11:23:11.1134505' slaat een tijdwaarde op.

Merk op dat de tijd slechts een deel is van deze string, die ook de naam van de weekdag bevat. Gebruik niet de CONVERT() of CAST() functies in dit geval; ze retourneren ook een TIME-gegevenstype, maar zonder de dag van de week.

Als je een gesproken taal gebruikt die afwijkt van de servertaal, gebruik dan het trefwoord USING en de juiste cultuurcode. Voor de Poolse taal zou je schrijven:

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

Zie de officiële SQL Server-documentatie voor meer informatie over cultuurparameterwaarden.

In dit geval moet u de PARSE() . gebruiken functie, ook al levert het niet de beste prestaties. Als u werkt met een tekenreeks die een tijdwaarde vertegenwoordigt die niet sla aanvullende gegevens op (zoals de naam van de weekdag), gebruik de CASE() functie. Hier is een voorbeeld.

Oplossing 2:

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

Hier is het resultaat:

11:23:11.1134505

De tekenreeks die de datum en tijd bevat die moeten worden geconverteerd, moet de indeling hebben van het gegevenstype T-SQL-datum en -tijd. U kunt meer lezen in de SQL Server-documentatie.

De CAST() functie is ANSI SQL Standard en de prestaties zijn beter dan CONVERT() of PARSE() .

Ten slotte kunt u ook de CONVERT() . gebruiken functie. Kijk naar het volgende voorbeeld.

Oplossing 3:

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

Het resultaat:

11:23:11.1134505

De CONVERT() functie heeft drie argumenten nodig:het nieuwe gegevenstype, de tekenreeks die moet worden geconverteerd en het (optionele) gewenste formaat. U moet deze functie echter alleen gebruiken als u moet specificeren hoe de datum- en tijdgegevens moeten worden opgemaakt, omdat de prestaties niet zo goed zijn als CAST() .


  1. Converteer 'datetime' naar 'date' in SQL Server (T-SQL-voorbeelden)

  2. SQLite-queryresultaten uitvoeren als een door tabs gescheiden lijst

  3. Evolutie van fouttolerantie in PostgreSQL:tijdreizen

  4. Hoe een CSV-bestand in de MySQL-tabel te importeren