sql >> Database >  >> RDS >> Sqlserver

Hoe CAST() werkt in SQL Server

In SQL Server, de CAST() functie converteert een uitdrukking van het ene gegevenstype naar het andere.

Hier is een snel overzicht van de functie met voorbeelden.

Syntaxis

De syntaxis gaat als volgt:

CAST ( expression AS data_type [ ( length ) ] )  

Waar expression is de uitdrukking die moet worden geconverteerd, data_type is het nieuwe gegevenstype, en length is een optionele lengte voor het nieuwe gegevenstype.

Voorbeeld

Hier is een voorbeeld van het casten van een tekenreeks als decimaal:

SELECT CAST('007' AS DECIMAL(5,2));

Resultaat:

7.00

String to Date

Hier is een voorbeeld van het casten van een string naar een datum:

SELECT CAST('09 Feb 2030' AS date);

Resultaat:

2030-02-09

In dit geval de CAST() functie was in staat om te bepalen welke datumdelen welke zijn, omdat ik de datum heb opgegeven in een formaat dat het herkent.

Het doorgeven van een waarde die niet als datum kan worden gegoten, resulteert in een fout:

SELECT CAST('Next Xmas' AS date);

Resultaat:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

Lokaal

De taal van de huidige sessie kan een verschil maken in de interpretatie van datums.

Dit is wat er gebeurt als je de Britse taal gebruikt:

SET LANGUAGE British;
SELECT CAST('09/02/2030' AS date);

Resultaat:

2030-02-09

In dit geval werd de datum geïnterpreteerd als de negende dag van februari.

Laten we de taal veranderen in us_English :

SET LANGUAGE us_English;
SELECT CAST('09/02/2030' AS date);

Resultaat:

2030-09-02

Deze keer interpreteerde het de datum als de tweede dag van september.

Aaneenschakeling van tekenreeksen

Hier is een voorbeeld van het casten van een numerieke waarde naar een string om de waarde samen te voegen met een string:

SELECT 'Likes: ' + CAST(178 AS VARCHAR(10));

Resultaat:

Likes: 178

Dit is wat er gebeurt als we het niet casten:

SELECT 'Likes: ' + 178;

Resultaat:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Likes: ' to data type int.

Wanneer u probeert twee waarden met verschillende gegevenstypen samen te voegen, moet SQL Server impliciet een van de waarden converteren om het gegevenstype van de andere te gebruiken, zodat ze allebei hetzelfde gegevenstype zijn voordat de aaneenschakeling kan worden uitgevoerd. Het volgt de regels van de voorrang van het gegevenstype om deze conversie uit te voeren.

In SQL Server is de INT gegevenstype heeft een hogere prioriteit dan VARCHAR .

Daarom probeert SQL Server in het bovenstaande voorbeeld de tekenreeks naar een geheel getal te converteren. Maar dit mislukt omdat de string niet kan worden geconverteerd naar een geheel getal.

Tekst afkappen

Een handige kleine truc die we kunnen uitvoeren met de CAST() functie is om langere strings af te kappen tot een beter leesbare lengte.

Hier is een voorbeeld van het afkappen van tekst die is geselecteerd uit een databasetabel:

SELECT
    ProductName,
    CAST(ProductName AS VARCHAR(20)) AS Truncated
FROM Products;

Resultaat:

+---------------------------------+----------------------+
| 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 |
+---------------------------------+----------------------+

Meer informatie

De CAST() functie werkt op dezelfde manier als de CONVERT() functie, en met beide kunnen veel gegevensconversies worden uitgevoerd. Dat gezegd hebbende, er zijn verschillen tussen hen.

Zie de documentatie van Microsoft voor CAST() en CONVERT() voor meer gedetailleerde informatie over het gebruik van deze functie.


  1. SQL tussen niet inclusief

  2. Oracle-triggerfout ORA-04091

  3. Kan niet decoderen met pgcrypto van AES-256-CBC, maar AES-128-CBC is OK

  4. Leeftijd berekenen vanaf verjaardag met oracle plsql-trigger en de leeftijd in de tabel invoegen