SQL: convertire un valore float in un varchar

In questo articolo spiegherò come convertire in sicurezza una colonna float in una colonna varchar.

Mi è recentemente capitato di dover trasformare dei valori contenuti originariamente in una colonna float in un’altra colonna di tipo varchar. Il caso pratico si verifica facilmente, ad esempio con i numeri di telefono, partita iva, ecc.

La prima cosa che viene in mente è di effettuare una conversione diretta.

ALTER TABLE nome_tabella ALTER COLUMN VARCHAR(11)

Sembra tutto corretto, ma il risultato è inaccettabile; infatti la colonna trasformata conterrà i dati con notazione scientifica. Ad esempio il numero 12345678901 diventa 1.23457e+010

Questo perché il formato float contiene il numero in virgola mobile, e la sua rappresentazione alfanumerica è proprio con notazione scientifica.

Nei casi citati abbiamo però a che fare con numeri interi (senza decimali), per cui possiamo ottenere il risultato ottenuto tramite un passaggio intermedio.

ALTER TABLE nome_tabella ALTER COLUMN DECIMAL(11,0)

In questo modo abbiamo fissato il numero, togliendolo dalla scomoda (per il nostro fine) situazione di numero in virgola mobile.

A questo punto possiamo effettuare la nostra conversione:

ALTER TABLE nome_tabella ALTER COLUMN VARCHAR(11)

La colonna numerica diventerà alfanumerica mantenendo il numero esattamente come ce lo aspettiamo.

Nell’esempio ho usato una ALTER, ma lo stesso ragionamento vale anche per le conversioni effettuate con CONVERT e CAST, come nell’esempio che segue:

DECLARE @float AS FLOAT
SELECT @float=12345678901
PRINT CONVERT(VARCHAR, @float)
PRINT CONVERT(VARCHAR, CONVERT(DECIMAL(11,0), @float))

Il metodo funziona anche con NVARCHAR.

Replica