Blog
home > blog > TSQL: convertire un numero in esadecimale

Tag: TSQL, sql, SQL Server

TSQL: convertire un numero in esadecimale

Alle volte c'è la necessità di convertire un numero in esadecimale direttamente dalla fonte dati per generare dei codici colore da usare direttamente su una pagina web.
di Maurizio Ceravolo
L'altro giorno ho avuto l'esigenza di generare dei codici colore direttamente dalla fonte dati, per comodità e prestazioni. La fonte dati era composta da un grosso numero di dati e dovevo generare dei gradienti di colore per rappresentare dei dati in maniera visuale su delle mappe.

Per fare questa cosa ho normalizzato i miei numeri in una scala da 0 a 255 in modo da poterlo convertire facilmente in un codice colore HTML e metterlo direttamente in pagina. Per poter fare questo occorre poter trasformare i numeri dalla base decimale a quella esadecimale, in quanto in HTML i codici colori sono scritti come come una tripletta di numeri esadecimali.

Ad esempio il rosso viene scritto con il seguente codice #FF0000. In html i colori vengono espressi come combinazione delle tre componenti fondamentali, il rosso, il verde e il blu, conosciuta anche come RGB o tricromia. Quindi nell'esempio precedente i primi due caratteri dopo il # (cancelletto) rappresentano il valore della componente rossa (FF ovvero 255, valore massimo), mentre i secondi due caratteri rappresentano la componente verde (00 ovvero 0, valore minimo) ed infine i terzi due caratteri rappresentano la componente blu (00 ovvero 0, valore minimo).

Quindi il nostro problema è di prendere un numero è di convertirlo in una stringa esadecimale. Per fare questo possiamo utilizzare in TSQL (l'sql di SQL Server) una funzione non documentata che si chiama sys.fn_varbintohexstr. Questa funzione prende in input un numero e restituisce in output una stringa con la sua rappresentazione esadecimale.

Ad esempio se eseguo questa SQL

SELECT sys.fn_varbintohexstr(255)

Ottengo come risultato 0x000000ff.

Nel nostro caso specifico, ci serve un numero esadecimale a due cifre e quindi dobbiamo prendere gli ultimi due caratteri di questa stringa.

SELECT RIGHT(sys.fn_varbintohexstr(@Numero),2)

dove @Numero sarà il numero da 0 a 255 che vogliamo convertire.

In conclusione se voglio rappresentare un mio dato (come abbiamo detto già normalizzato in un valore da 0 a 255) con un gradiente di colore rosso, quello che dovrò scrivere è 

SELECT '#' + RIGHT(sys.fn_varbintohexstr(@NumeroNormalizzato),2)  + '0000'

In questo modo otterrò un codice colore HTML dipendente dal dato che voglio visualizzare.

Happy coding. :-)
Post correlati
2010
9
Dicembre
TSQL: concatenare più record senza usare un cursore
Maurizio Ceravolo
Concatenare più record di una tabella in un'unica stringa necessita un cursore, che però è poco performante. Vediamo un metodo tramite FOR XML PATH per concatenare con una query secca.
2010
26
Novembre
Modificare l'owner delle tabelle di un database su SQL Server
Maurizio Ceravolo
Vediamo un semplice script per generare l'sql per modificare l'owner di tutte le tabelle di un database in SQL Server.
2010
28
Ottobre
Abilitare e disabilitare i vincoli su un database SQL Server
Maurizio Ceravolo
Due stored procedure per abilitare e disabilitare i vincoli su un database SQL Server.
2011
4
Febbraio
Dimensioni di tutte le tabelle di un database SQL Server
Maurizio Ceravolo
Vediamo una stored procedure per calcolare le dimensioni, in numero di record ed in occupazione su disco, di dati ed indici di ogni tabella di un database su SQL Server.
2010
28
Ottobre
Eseguire una query SQL da un SQL Server ad un altro
Maurizio Ceravolo
Esaminiamo il modo per eseguire query SQL fra database differenti e server differenti


Archivio Mensile Blog
Tag Cloud
Apple Bing Facebook geek Google Google+ humor informatica innovazione iPhone marketing Microsoft mobile relazioni social network tag vetro video videogiochi Windows Phone 7
Ultimi Post
I migliori di oggi
I più popolari del mese
Top post