sql >> Databasteknik >  >> RDS >> Sqlserver

Hur CAST() fungerar i SQL Server

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.


  1. Är det något fel med joins som inte använder JOIN-nyckelordet i SQL eller MySQL?

  2. SQL Server's Equivalent to Sleep():WAITFOR-utlåtandet

  3. Konvertera den nya raden till XML i en Oracle Trigger

  4. Fråga för att ta bort unik eller primär nyckel från MYsql-tabellen