I SQL Server, CAST()
funktion konverterar ett uttryck av en datatyp till en annan.
Här är en snabb översikt över funktionen med exempel.
Syntax
Syntaxen ser ut så här:
CAST ( expression AS data_type [ ( length ) ] )
Där expression
är uttrycket som ska konverteras, data_type
är den nya datatypen och length
är en valfri längd för den nya datatypen.
Exempel
Här är ett exempel på hur du castar en sträng som decimal:
SELECT CAST('007' AS DECIMAL(5,2));
Resultat:
7.00
Sträng till datum
Här är ett exempel på hur du castar en sträng till ett datum:
SELECT CAST('09 Feb 2030' AS date);
Resultat:
2030-02-09
I det här fallet CAST()
funktion kunde avgöra vilka datumdelar som är vilka eftersom jag angav datumet i ett format som den känner igen.
Att skicka ett värde som inte kan castas som ett datum resulterar i ett fel:
SELECT CAST('Next Xmas' AS date);
Resultat:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Lokal
Språket för den aktuella sessionen kan göra skillnad i hur datum tolkas.
Här är vad som händer när du använder det brittiska språket:
SET LANGUAGE British;
SELECT CAST('09/02/2030' AS date);
Resultat:
2030-02-09
I det här fallet tolkades datumet som den nionde februari.
Låt oss ändra språket till us_English
:
SET LANGUAGE us_English;
SELECT CAST('09/02/2030' AS date);
Resultat:
2030-09-02
Den här gången tolkade den datumet som den andra dagen i september.
Strängsammansättning
Här är ett exempel på hur man castar ett numeriskt värde till en sträng för att sammanfoga värdet med en sträng:
SELECT 'Likes: ' + CAST(178 AS VARCHAR(10));
Resultat:
Likes: 178
Det här är vad som händer om vi inte castar det:
SELECT 'Likes: ' + 178;
Resultat:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Likes: ' to data type int.
När du försöker sammanfoga två värden med olika datatyper måste SQL Server implicit konvertera ett av värdena för att använda datatypen för det andra, så att de båda är samma datatyp innan den kan utföra sammankopplingen. Det följer reglerna för datatypsprioritet för att göra denna konvertering.
I SQL Server, INT
datatypen har högre prioritet än VARCHAR
.
Därför försöker SQL Server i exemplet ovan att konvertera strängen till ett heltal. Men detta misslyckas eftersom strängen inte kan konverteras till ett heltal.
Trunkera text
Ett praktiskt litet trick vi kan utföra med CAST()
Funktionen är att trunkera längre strängar till en mer läsbar längd.
Här är ett exempel på trunkering av text vald från en databastabell:
SELECT
ProductName,
CAST(ProductName AS VARCHAR(20)) 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 | +---------------------------------+----------------------+
Mer information
CAST()
Funktionen fungerar på liknande sätt som CONVERT()
funktion, och många datakonverteringar kan göras med endera. Som sagt, det finns skillnader mellan dem.
Se Microsofts dokumentation för CAST()
och CONVERT()
för mer detaljerad information om hur du använder den här funktionen.