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

CONVERT() in SQL Server

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

Ecco una rapida panoramica della funzione con esempi.

Sintassi

La sintassi è questa:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 

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

Lo style opzionale argomento può essere utilizzato per specificare come la funzione deve tradurre l'expression discussione. Ad esempio, puoi utilizzare questo argomento per specificare il formato della data.

Esempio

Ecco un esempio di conversione di una stringa in decimale:

SELECT CONVERT(DECIMAL(5,2), '007');

Risultato:

7.00

Fino alla data

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

SELECT CONVERT(date, '09 Feb 2030');

Risultato:

2030-02-09

In questo caso il CONVERT() 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 CONVERT(date, 'My Birthday');

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 CONVERT(date, '09/02/2030');

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 CONVERT(date, '09/02/2030');

Risultato:

2030-09-02

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

Lo style Argomento

Possiamo usare lo style opzionale argomento per specificare come deve essere tradotta l'espressione.

Esempio:

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";

Risultato:

+------------+------------+--------------+------------+------------+
| British    | US         | US (short)   | ISO        | German     |
|------------+------------+--------------+------------+------------|
| 2030-02-09 | 2030-09-02 | 2030-09-02   | 2030-09-02 | 2030-02-09 |
+------------+------------+--------------+------------+------------+

Concatenazione di stringhe

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

SELECT 'Age: ' + CONVERT(varchar(10), 27);

Risultato:

Age: 27

Ecco cosa succede se non lo convertiamo prima:

SELECT 'Age: ' + 27;

Risultato:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Age: ' 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 ciò non riesce perché la stringa non può essere convertita in un numero intero.

Troncare il testo

Un piccolo trucco pratico che possiamo eseguire con CONVERT() 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,
    CONVERT(varchar(20), ProductName) 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 CONVERT() la funzione funziona in modo simile a CAST() 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.