Skip to content
Skip to content
Menu
Info Cafe
Info Cafe

SQLShack (Italiano)

By admin on Febbraio 12, 2021

Questo articolo è uno sforzo per discutere le funzioni SQL Cast e SQL Convert come seguito degli articoli precedenti, in cui abbiamo discusso diversi suggerimenti SQL come SQL Date, SQL Coalesce, SQL Union, SQL Join, SQL Like, SQL String etc.

A volte abbiamo bisogno di convertire i dati tra diversi tipi di dati SQL. Oltre a lavorare con i dati, ci sono alcune funzioni integrate che possono essere utilizzate per convertire i dati. Quindi diamo un’occhiata più da vicino alle funzioni di conversione SQL CAST e SQL CONVERT in dettaglio.

Introduzione

Per eseguire operazioni o confronti o trasformazioni tra dati in un database SQL Server, i tipi di dati SQL di quei valori devono corrispondere. Quando i tipi di dati SQL sono diversi, passano attraverso un processo chiamato type-casting. La conversione dei tipi di dati SQL, in questo processo, può essere implicita o esplicita.

Le funzioni di conversione del tipo di dati comunemente usate specialmente per soddisfare gli standard dei dati degli oggetti o dei sistemi di destinazione. Siamo nel mondo che tratta dati eterogenei.

Nota: Una panoramica dei concetti di alto livello della gestione dei dati è discussa in questo articolo SQL string functions for Data Munging (Wrangling).

A volte i tipi di dati devono essere convertiti in altri tipi di dati per calcoli o trasformazioni o processi o per soddisfare i formati di dati di destinazione. Per esempio, quando moltiplichiamo i dati di tipo decimale con un intero, i dati subiscono una trasformazione interna e implicitamente convertono un intero in un tipo di dati decimale e il risultato è un dato decimale.

Conversione SQL implicita ed esplicita

Quando abbiamo a che fare con due valori che sono uguali in natura ma di tipo diverso, dietro le quinte, il motore del database converte i valori di tipo di dati inferiore in un tipo di dati superiore prima di poter procedere con il calcolo. Questo tipo è conosciuto come una conversione implicita. D’altra parte, abbiamo conversioni esplicite in cui si chiama una funzione SQL CAST o SQL CONVERT per cambiare il tipo di dati. Potete fare riferimento all’articolo Panoramica sul formato di data SQL; funzione DateDiff SQL, funzione DateAdd SQL e altro per degli esempi.

Sintassi:

1
2
3
4

CAST
CAST ( exp AS datatype )
CONVERT
CONVERT ( datatype , expression )

exp
Definisce l’argomento dell’espressione valida

datatype
Questo fornisce i dettagli del tipo di dati di destinazione

len
Questo specifica la lunghezza del tipo di dati di destinazione. Questo è un parametro opzionale per impostazione predefinita, il valore della lunghezza è impostato a 30

style
È un valore intero usato con la funzione SQL CONVERT per tradurre l’espressione nell’output desiderato

SQL Convert e Cast data conversion chart

La seguente è un foglio di riferimento rapido per la conversione del tipo di dati

SQL Convert e SQL Cast tabella di conversione dati
Riferimento: https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017

Esempio 1: Conversione SQL implicita con numeri

Nell’esempio seguente, due numeri casuali 5 e 212345 sono aggiunti e i risultati sono visualizzati.

1
2

DECLARE @a int=5, @b bigint=212345
SELECT @a, @b, @a+@b

risultati impliciti di conversione con numeri

Risultati della conversione implicita con i numeri

Vediamo che i due valori sono di tipi di dati diversi, il motore del database ha implicitamente convertito il valore int in bigint prima di fare l’addizione. E poi ha potuto elaborare l’operazione di addizione perché sono diventati lo stesso tipo di dati.

Esempio 2: conversione implicita SQL con i caratteri

Nell’esempio seguente, aggiungeremo due tipi di dati carattere. Creiamo le variabili @a tipo di dati carattere e assegniamo un valore ‘5’ e @b con un valore ‘2’.

1
2

DECLARE @a char=’5′, @b char=’2′
SELECT @a, @b, @a+@b

Nell’output, prima, otteniamo i valori delle variabili ‘a’ e ‘b’, secondo e il risultato del calcolo che è entrambi i valori insieme. Con i valori dei caratteri, il motore del database ha implicitamente deciso di concatenare entrambi i valori e visualizzare 52 come output del calcolo.

Risultati della conversione implicita con i caratteri

Esempio 3: Come eseguire una conversione esplicita usando SQL Cast

Nel seguente esempio, vedremo come forzare la conversione da un tipo di dati a un altro. Prendiamo un esempio precedente e convertiamo i valori di input al tipo numerico e poi aggiungiamo questi valori.

1
2

DECLARE @a char=’5′, @b char=’2′
SELECT @a,@b, cast(@a come int)+ cast(@b come int)

La funzione SQL CAST prende due argomenti. In primo luogo, i dati che vogliamo elaborare, in questo caso, i dati sono ‘5’ e ‘2’ e sono di campo char, e poi come volete elaborarli, o come vogliamo CASTarli. In questo caso, volete CASTarlo come un campo intero.

Nell’output, notate che i valori di carattere in ingresso sono convertiti e anche aggiunti quei valori e il risultato è di tipo intero.

Risultati espliciti della conversione usando SQL Cast

Esempio 4: Gestione avanzata degli errori usando TRY_CAST

Nel seguente esempio, sezioneremo ulteriormente i valori dei tipi di dati usando la funzione SQL cast e la funzione SQL try_cast.

Nel seguente SQL, il valore stringa ‘123’ è convertito in BIGINT. È stato in grado di convertire a causa della natura dei dati. Diamo un’occhiata al secondo esempio, il valore della stringa ‘xyz’ è usato nell’espressione per la funzione SQL cast. Quando state facendo questo, vedrete un errore che dice “Error Converting data type varchar to bigint”. Quando state facendo l’analisi dei dati con varie fonti di dati, di solito otteniamo questo tipo di valori nei dati di origine. Quindi, al fine di gestire questo tipo di scenari, è possibile utilizzare la funzione try_cast di SQL. Nella terza linea di SQL, passiamo la stringa come valore di input, dopo l’esecuzione, non abbiamo ricevuto un errore ma finiamo per ottenere un valore NULL come output. Il valore NULL può essere ulteriormente semplificato usando la funzione SQL ISNULL o la funzione SQL coalesce.

Nota: Potete fare riferimento all’articolo Usare la funzione SQL Coalesce in SQL Server per maggiori informazioni.

1
2
3
4
5
6
7

SELECT TRY_CAST(‘123’ AS BIGINT);
GO
SELECT CAST(‘xyz’ AS BIGINT);
GO
SELECT TRY_CAST(‘xyz’ AS BIGINT);
GO
SELECT ISNULL(TRY_CAST(‘xyz’ AS BIGINT), 99);

Risultati della gestione degli errori dall'uso di Try Cast

Esempio 5: Codice di stile spiegato nelle funzioni CONVERT

L’esempio seguente converte il campo hiredate in diversi stili disponibili della funzione SQL convert. La funzione SQL convert inizia prima con un tipo di dati, e una virgola, e poi seguita da un’espressione. Con Date, abbiamo anche un altro argomento che possiamo fornire, chiamato codice di stile SQL. Potete trovare un elenco di questi nell’articolo CAST e CONVERT (Transact-SQL) documentazione tecnica.

1
2
3
4
5
6
7
8
9

SELECT hiredate,
CONVERT(CHAR(50), hiredate),
CONVERT(CHAR(50), hiredate, 1) ‘S-1’,
CONVERT(CHAR(50), hiredate, 101) ‘s-101’,
CONVERT(CHAR(50), hiredate, 102) ‘s-102’,
CONVERT(CHAR(50), hiredate, 103) ‘s-103’,
CONVERT(CHAR(50), hiredate, 104) ‘s-104’,
CONVERT(CHAR(50), hiredate, 105) ‘s-105’
FROM HumanResources.Employee;

Andiamo avanti eseguendo il suddetto SQL. Ora possiamo vedere il diverso output che viene visualizzato utilizzando i parametri di stile all’interno della funzione di conversione SQL. Potete vedere che il campo hiredate converte il campo data in diversi stili.

Risultati dell'utilizzo della funzione di conversione SQL

risultati dell'utilizzo della funzione di conversione SQL

Esempio 6: Le differenze e le somiglianze tra CAST e CONVERT

Nel seguente esempio, si può vedere che l’uso di CAST e CONVERT nel seguente T-SQL per confrontare i tempi di esecuzione.

Eseguiamo il seguente T-SQL per utilizzare la funzione CAST

1
2
3
4
5
6
7
8
9
10
11

SET STATISTICS TIME ON
WITH temp
AS (SELECT CAST(GETDATE() AS DATE) AS cast_date,
0 AS n
UNION ALL
SELECT CAST(GETDATE() + n AS DATE) AS cast_date,
n + 1
FROM temp
WHERE n < 1000000)
SELECT MAX(cast_date)
FROM temp OPTION(MAXRECURSION 0);

Differenze e similitudini tra SQL CONVERT e CAST

Differenze e similitudini tra SQL CONVERT e CAST

Ora, eseguite lo stesso T-SQL con la funzione SQL CONVERT al suo posto.

1
2
3
4
5
6
7
8
9
10
11

SET STATISTICS TIME ON
WITH temp
AS (SELECT CONVERT(DATE, GETDATE(), 20) AS convert_date,
0 AS n
UNION ALL
SELECT CONVERT(DATE, GETDATE() + n, 20) AS convert_date,
n + 1
FROM temp
WHERE n < 1000000)
SELECT MAX(convert_date)
FROM temp OPTION(MAXRECURSION 0);

Consigli veloci:

  • CAST è puramente uno standard ANSI-SQL. Ma, CONVERT è una funzione specifica di SQL Server come abbiamo to_char o to_date in Oracle
  • CAST è prevalentemente disponibile in tutti i prodotti di database a causa della sua portabilità e facilità d’uso
  • Non ci sarà una grande differenza in termini di esecuzione della query tra le funzioni SQL Cast e SQL Convert. Si può notare una leggera differenza nei tempi di esecuzione questo è dovuto alla conversione interna di SQL CAST nella sua funzione nativa SQL CONVERT ma la funzione CONVERT è dotata di un’opzione “Style-code” per ricavare varie combinazioni di data e ora, decimali e valori monetari. In ogni caso, la funzione SQL CONVERT funziona leggermente meglio della funzione SQL CAST

Esempio 7: Codice di stile nel calcolo usando CONVERT

In questo esempio, si elencherà il campo tasso dalla tabella “HumanResources.EmployeeHistory” del database Adventureworks2016. La seconda colonna nell’SQL usa la funzione SQL CONVERT con il tipo di dati char(10) e l’espressione rate data la moltiplica per 1000.

Il primo SQL, il codice di stile non è usato ma per il secondo e il terzo SQL, il codice di stile è impostato a 1.

1
2
3
4
5
6
7
8
9

SELECT TOP 3 Rate,
CONVERT(CHAR(10), rate * 1000) AS TextPrice
FROM HumanResources.EmployeePayHistory;
SELECT TOP 3 Rate,
CONVERT(CHAR(10), rate * 1000, 0) AS TextPrice
FROM HumanResources.EmployeePayHistory;
SELECT TOP 3 Rate,
CONVERT(CHAR(10), rate * 1000, 1) AS TextPrice
FROM HumanResources.EmployeePayHistory;

Nell’output, possiamo vedere che la query con il codice di stile 1 restituisce un output di testo con un separatore di virgola nella posizione delle migliaia. La query con il codice di stile 0 restituisce un output di testo senza separatore di virgola.

Codice di stile nel calcolo usando SQL CONVERT

Codice di stile nel calcolo usando SQL CONVERT

Wrap Up

Finora, abbiamo parlato delle funzioni SQL cast, SQL try_cast e SQL convert e di come è possibile convertire tra stringhe, interi e valori di data e ora. Abbiamo anche esaminato la funzione SQL CONVERT con il codice di stile. Abbiamo fatto alcuni esempi di funzioni di conversione SQL implicite ed esplicite. E abbiamo capito la differenza tra le funzioni SQL CAST e SQL CONVERT. Vedete anche che viene usata un’espressione condizionale con SQL ISNULL insieme a SQL try_cast, e di nuovo, se l’avessi fatto senza usare la parte try, avrebbe fallito invece di restituire un valore. Questo è il modo in cui è possibile eseguire il cast dei valori, che è abbastanza standard, con questo livello aggiuntivo, e anche e gli errori con più grazia.

Questo è tutto per ora… Spero vi sia piaciuto leggere questo articolo. Sentitevi liberi di commentare qui sotto.

  • Autore
  • Post recenti
Prashanth Jayaram
Sono un tecnologo di database con 11+ anni di ricca esperienza pratica sulle tecnologie di database. Sono Microsoft Certified Professional e ho una laurea in Master of Computer Application.
La mia specialità sta nel progettare & implementare soluzioni di alta disponibilità e migrazioni DB multipiattaforma. Le tecnologie su cui lavoro attualmente sono SQL Server, PowerShell, Oracle e MongoDB.
Vedi tutti i post di Prashanth Jayaram

Prashanth Jayaram
Latest posts by Prashanth Jayaram (see all)
  • Una rapida panoramica del controllo dei database in SQL – 28 gennaio, 2021
  • Come impostare Azure Data Sync tra i database Azure SQL e SQL Server on-premises – 20 gennaio 2021
  • Come eseguire operazioni di importazione/esportazione di database Azure SQL utilizzando PowerShell – 14 gennaio 2021

Navigazione articoli

Chris Tamburello (Italiano)
Risparmiare denaro sui voli: Perché la tua famiglia deve sapere quando Southwest estende i suoi orari

Lascia un commento Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Articoli recenti

  • Firebush (Italiano)
  • Previsione dei tassi CD per il 2021: I tassi rimarranno probabilmente bassi, ma potrebbero aumentare nel corso dell’anno
  • Come strutturare la documentazione del sistema di gestione della qualità
  • Dolore pelvico cronico e prostatite: sintomi, diagnosi e trattamento
  • Mixed Berry Crisp (Italiano)
  • Ricetta budino al cioccolato basso -carb
  • Giochi e attività salutari per i bambini | UIC Online Informatics
  • Wheat Ales (American) (Italiano)
  • I benefici dell’allattamento al seno dopo un anno
  • È sicuro buttare i fondi di caffè nel lavandino | Atomic Plumbing

Meta

  • Accedi
  • Feed dei contenuti
  • Feed dei commenti
  • WordPress.org

Archivi

  • Marzo 2021
  • Febbraio 2021
  • Gennaio 2021
  • Dicembre 2020
  • DeutschDeutsch
  • NederlandsNederlands
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • PolskiPolski
  • 日本語日本語
©2021 Info Cafe | WordPress Theme by SuperbThemes.com