Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

3 maneiras de converter HEX para INT no SQL Server (T-SQL)


Aqui estão 3 maneiras de converter um valor hexadecimal em um inteiro no SQL Server.

Primeiro estão duas funções T-SQL que permitem converter um valor hexadecimal em um inteiro. Além dessas funções, há também o conceito de conversão implícita, que também pode produzir o mesmo resultado.


Exemplo 1 – A função CONVERT()


A primeira função que veremos é a CONVERT() função. Isso permite converter entre tipos de dados no SQL Server.

Aqui está um exemplo de como usar esta função para converter um valor hexadecimal em um inteiro:
SELECT CONVERT(INT, 0xfcab) Result;

Resultado:
+----------+
| Result   |
|----------|
| 64683    |
+----------+

Neste caso, convertemos o valor hexadecimal fcab (prefixado com 0x ) para um inteiro.

Exemplo 2 – A função CAST()


Alternativamente, podemos usar o CAST() função para fazer a mesma coisa que o exemplo anterior:
SELECT CAST(0xfcab AS INT) Result;

Resultado:
+----------+
| Result   |
|----------|
| 64683    |
+----------+

Observe que CAST() e CONVERT() usar sintaxes ligeiramente diferentes. No caso de CAST() o valor a ser convertido vem primeiro, enquanto é o contrário com CONVERT() .

Exemplo 3 – Conversão implícita


Aqui está um exemplo de como realizar uma conversão implícita, simplesmente multiplicando o valor hexadecimal por 1:
SELECT 0xfcab * 1 Result;

Resultado:
+----------+
| Result   |
|----------|
| 64683    |
+----------+

Exemplo 4 – Formatando o resultado


Também podemos usar o FORMAT() função para formatar o resultado final. Nesse caso, ainda usamos uma função de conversão para realizar a conversão real. É só que também usamos o FORMAT() função para formatar o resultado como um número (usando o N especificador de formato).
SELECT FORMAT(CAST(0xfcab AS INT), 'N') Result;

Resultado:
+-----------+
| Result    |
|-----------|
| 64,683.00 |
+-----------+

Observe que essa função realmente retorna o resultado como uma string.

Observe também que o FORMAT() A função aceita apenas tipos de dados numéricos e de data e hora. Portanto, não podemos passar um valor hexadecimal diretamente para a função. Se tentarmos fazer isso, eis o que acontece:
SELECT FORMAT(0xfcab, 'N') Result;

Resultado:
Argument data type varbinary is invalid for argument 1 of format function.