Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona CAST() in SQL Server

In SQL Server, il CAST() converte un'espressione di un tipo di dati in un altro.

Ecco una rapida panoramica della funzione con esempi.

Sintassi

La sintassi è questa:

CAST ( expression AS data_type [ ( length ) ] )  

Dove expression è l'espressione da convertire, data_type è il nuovo tipo di dati e length è una lunghezza opzionale per il nuovo tipo di dati.

Esempio

Ecco un esempio di cast di una stringa come decimale:

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

Risultato:

7.00

Fino alla data

Ecco un esempio di cast di una stringa a una data:

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

Risultato:

2030-02-09

In questo caso il CAST() la funzione è stata in grado di determinare quali parti della data sono quali perché ho fornito la data in un formato che riconosce.

Il passaggio di un valore che non può essere convertito come data genera un errore:

SELECT CAST('Next Xmas' AS date);

Risultato:

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

Locale

La lingua della sessione corrente può fare la differenza nel modo in cui le date vengono interpretate.

Ecco cosa succede quando si utilizza la lingua britannica:

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

Risultato:

2030-02-09

In questo caso, la data è stata interpretata come il nono giorno di febbraio.

Cambiamo la lingua in us_English :

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

Risultato:

2030-09-02

Questa volta ha interpretato la data come il secondo giorno di settembre.

Concatenazione di stringhe

Ecco un esempio di cast di un valore numerico in una stringa per concatenare il valore con una stringa:

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

Risultato:

Likes: 178

Ecco cosa succede se non lo trasmettiamo:

SELECT 'Likes: ' + 178;

Risultato:

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

Quando si tenta di concatenare due valori con tipi di dati diversi, SQL Server deve convertire in modo implicito uno dei valori per usare il tipo di dati dell'altro, in modo che siano entrambi dello stesso tipo di dati prima di poter eseguire la concatenazione. Segue le regole di precedenza del tipo di dati per eseguire questa conversione.

In SQL Server, il INT il tipo di dati ha una precedenza maggiore rispetto a VARCHAR .

Pertanto, nell'esempio precedente, SQL Server tenta di convertire la stringa in un numero intero. Ma questo non riesce perché la stringa non può essere convertita in un numero intero.

Troncare il testo

Un piccolo trucco pratico che possiamo eseguire con CAST() la funzione è troncare le stringhe più lunghe a una lunghezza più leggibile.

Ecco un esempio di troncamento del testo selezionato da una tabella di database:

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

Risultato:

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

Maggiori informazioni

Il CAST() La funzione funziona in modo simile a CONVERT() funzione e molte conversioni di dati possono essere eseguite utilizzando uno dei due. Detto questo, ci sono differenze tra loro.

Consulta la documentazione di Microsoft per CAST() e CONVERT() per informazioni più dettagliate sull'utilizzo di questa funzione.