I SQL Server er CONVERT()
funktion konverterer et udtryk af én datatype til en anden.
Her er et hurtigt overblik over funktionen med eksempler.
Syntaks
Syntaksen ser sådan ud:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Hvor expression
er udtrykket, der skal konverteres, data_type
er den nye datatype og length
er en valgfri længde for den nye datatype.
Den valgfri style
argument kan bruges til at specificere, hvordan funktionen skal oversætte expression
argument. For eksempel kan du bruge dette argument til at angive datoformatet.
Eksempel
Her er et eksempel på konvertering af en streng til decimal:
SELECT CONVERT(DECIMAL(5,2), '007');
Resultat:
7.00
String til dato
Her er et eksempel på casting af en streng til en dato:
SELECT CONVERT(date, '09 Feb 2030');
Resultat:
2030-02-09
I dette tilfælde CONVERT()
funktion var i stand til at bestemme, hvilke datodele er hvilke, fordi jeg har angivet datoen i et format, som den genkender.
Hvis du sender en værdi, der ikke kan castes som en dato, resulterer det i en fejl:
SELECT CONVERT(date, 'My Birthday');
Resultat:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Lokal
Sproget i den aktuelle session kan gøre en forskel i, hvordan datoer fortolkes.
Her er, hvad der sker, når du bruger det britiske sprog:
SET LANGUAGE British;
SELECT CONVERT(date, '09/02/2030');
Resultat:
2030-02-09
I dette tilfælde blev datoen fortolket som værende den niende dag i februar.
Lad os ændre sproget til us_English
:
SET LANGUAGE us_English;
SELECT CONVERT(date, '09/02/2030');
Resultat:
2030-09-02
Denne gang fortolkede den datoen som værende den anden dag i september.
style
Argument
Vi kan bruge den valgfri style
argument for at specificere, hvordan udtrykket skal oversættes.
Eksempel:
SET LANGUAGE British;
SELECT
CONVERT(date, '09/02/2030') AS "British",
CONVERT(date, '09/02/2030', 101) AS "US",
CONVERT(date, '09/02/30', 1) AS "US (short)",
CONVERT(date, '20300902', 112) AS "ISO",
CONVERT(date, '09.02.2030', 104) AS "German";
Resultat:
+------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
Stringsammenkædning
Her er et eksempel på at caste en numerisk værdi til en streng for at sammenkæde værdien med en streng:
SELECT 'Age: ' + CONVERT(varchar(10), 27);
Resultat:
Age: 27
Her er, hvad der sker, hvis vi ikke konverterer det først:
SELECT 'Age: ' + 27;
Resultat:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Age: ' to data type int.
Når du forsøger at sammenkæde to værdier med forskellige datatyper, skal SQL Server implicit konvertere en af værdierne til at bruge den andens datatype, så de begge er den samme datatype, før den kan udføre sammenkædningen. Det følger reglerne for datatypeprioritet at udføre denne konvertering.
I SQL Server er int
datatypen har en højere prioritet end varchar
.
Derfor forsøger SQL Server i ovenstående eksempel at konvertere strengen til et heltal, men dette mislykkes, fordi strengen ikke kan konverteres til et heltal.
Trunkering af tekst
Et praktisk lille trick, vi kan udføre med CONVERT()
Funktionen er at afkorte længere strenge til en mere læsbar længde.
Her er et eksempel på afkortning af tekst valgt fra en databasetabel:
SELECT
ProductName,
CONVERT(varchar(20), ProductName) AS Truncated
FROM Products;
Resultat:
+---------------------------------+----------------------+ | ProductName | Truncated | |---------------------------------+----------------------| | Left handed screwdriver | Left handed screwdri | | Long Weight (blue) | Long Weight (blue) | | Long Weight (green) | Long Weight (green) | | Sledge Hammer | Sledge Hammer | | Chainsaw | Chainsaw | | Straw Dog Box | Straw Dog Box | | Bottomless Coffee Mugs (4 Pack) | Bottomless Coffee Mu | | Right handed screwdriver | Right handed screwdr | +---------------------------------+----------------------+
Flere oplysninger
CONVERT()
funktionen fungerer på samme måde som CAST()
funktion, og mange datakonverteringer kan udføres ved hjælp af begge. Når det er sagt, er der forskelle mellem dem.
Se Microsofts dokumentation for CAST()
og CONVERT()
for mere detaljerede oplysninger om brugen af denne funktion.