OVH Cloud OVH Cloud

Conversion d'une valeur Hexadecimal en décimal

6 réponses
Avatar
Laurent L.
Bonjour,

avec l'analyseur de requ=EAte je voudrais cr=E9er un script=20
pour convertir des nombres hexadecimal (40bits) en=20
decimal.
Une fonction de type HEXDEC (EXCEL) est elle disponible=20
avec Transact SQL?

Merci

6 réponses

Avatar
Jorge Lavado
Bonjour
Regarde si ceci aide

En EXCEL
HEX2DEC("FFFFFFFF5B") equals -16
HEX2DEC("3DA408B9") equals 103416031

En SQLSERVER: 0x + nombres hexadecimal ("0x"qui viens de Binary,varbinary

SELECT CONVERT(int,0x3DA408B9
SELECT CONVERT(int,0xFFFFFFFF5B
Avatar
Alexis Leroy
Par contre, personnellement, je n'arrive pas a le placer dans une fonction
récupérant comme paramètre un octet (varchar(2) ), comme par exemple 'D5' ou
'FF'

Quelqu'un a t"il une idée ?

Merci d'avance,

Alexis Leroy
Promotool.com

"Jorge Lavado" a écrit dans le message
de news:
Bonjour.
Regarde si ceci aide.

En EXCEL:
HEX2DEC("FFFFFFFF5B") equals -165
HEX2DEC("3DA408B9") equals 1034160313

En SQLSERVER: 0x + nombres hexadecimal ("0x"qui viens de


Binary,varbinary )

SELECT CONVERT(int,0x3DA408B9)
SELECT CONVERT(int,0xFFFFFFFF5B)





Avatar
Nicolas LETULLIER
Réponse de Steve Sturgis trouvée sur Google :

CREATE PROCEDURE spHexToInt @HexVal varchar(50) , @Int integer OUTPUT
AS

DECLARE @Power int
, @HexString varchar(15)

SET @HexString = '123456789ABCDEF'
SET @Power = 0
SET @Int = 0

WHILE LEN(@HexVal) <> 0 AND UPPER(RIGHT(@HexVal,1)) <> 'X'
BEGIN
SET @Int = @Int + (CHARINDEX(RIGHT(@HexVal, 1),@HexString) * POWER(16,
@Power))
SET @Power = @Power + 1
SET @HexVal = SUBSTRING(@HexVal, 1, LEN(@HexVal)-1)
END

Exemple d'utilisation

DECLARE @int integer
EXECUTE spHexToInt '0x20', @Int = @int OUTPUT
PRINT @int

Nicolas.


"Laurent L." a écrit dans le message
de news:e98f01c3f088$27a35560$
Bonjour,

avec l'analyseur de requête je voudrais créer un script
pour convertir des nombres hexadecimal (40bits) en
decimal.
Une fonction de type HEXDEC (EXCEL) est elle disponible
avec Transact SQL?

Merci
Avatar
Laurent L.
J'ai essayé la procédure, mais malheureusement une donnée
de type int ne peut exéder 2147483647.
Il me faudrait en fait renseigner un champs de type
varchar avec la valeur décimale de la donnée héxa.
Exemple : 0x01017B38B3 = 4319819955 en décimal
4319819955 > 2147483647

Mais là je suis un peu juste au niveau SQL.
Quelqu'un connait il une astuce?

-----Message d'origine-----
Réponse de Steve Sturgis trouvée sur Google :

CREATE PROCEDURE spHexToInt @HexVal varchar(50) , @Int


integer OUTPUT
AS

DECLARE @Power Bint
, @HexString varchar(15)

SET @HexString = '123456789ABCDEF'
SET @Power = 0
SET @Int = 0

WHILE LEN(@HexVal) <> 0 AND UPPER(RIGHT(@HexVal,1))


<> 'X'
BEGIN
SET @Int = @Int + (CHARINDEX(RIGHT(@HexVal,


1),@HexString) * POWER(16,
@Power))
SET @Power = @Power + 1
SET @HexVal = SUBSTRING(@HexVal, 1, LEN(@HexVal)-1)
END

Exemple d'utilisation

DECLARE @int integer
EXECUTE spHexToInt '0x20', @Int = @int OUTPUT
PRINT @int

Nicolas.


"Laurent L." a


écrit dans le message
de news:e98f01c3f088$27a35560$
Bonjour,

avec l'analyseur de requête je voudrais créer un script
pour convertir des nombres hexadecimal (40bits) en
decimal.
Une fonction de type HEXDEC (EXCEL) est elle disponible
avec Transact SQL?

Merci


.



Avatar
Nicolas LETULLIER
Petite conversion du type integer en bigint

CREATE PROCEDURE spHexToInt @HexVal varchar(50) , @Int bigint OUTPUT
AS

DECLARE @Power bigint
, @HexString varchar(15)

SET @HexString = '123456789ABCDEF'
SET @Power = 0
SET @Int = 0

WHILE LEN(@HexVal) <> 0 AND UPPER(RIGHT(@HexVal,1)) <> 'X'
BEGIN
SET @Int = @Int + (CHARINDEX(RIGHT(@HexVal, 1),@HexString) *
POWER(CONVERT(bigint,16),
@Power))
SET @Power = @Power + 1
SET @HexVal = SUBSTRING(@HexVal, 1, LEN(@HexVal)-1)
END

GO
DECLARE @int bigint
EXECUTE spHexToInt '0x01017B38B3', @Int = @int OUTPUT
PRINT @int

Attention, petite astuce pour le POWER, fonction qui renvoit un résultat
dans le type de la première expression, donc integer par défaut ->
Dépassement

Nicolas.


"Laurent L." a écrit dans le message
de news:f74b01c3f180$a1b1d540$
J'ai essayé la procédure, mais malheureusement une donnée
de type int ne peut exéder 2147483647.
Il me faudrait en fait renseigner un champs de type
varchar avec la valeur décimale de la donnée héxa.
Exemple : 0x01017B38B3 = 4319819955 en décimal
4319819955 > 2147483647

Mais là je suis un peu juste au niveau SQL.
Quelqu'un connait il une astuce?

-----Message d'origine-----
Réponse de Steve Sturgis trouvée sur Google :

CREATE PROCEDURE spHexToInt @HexVal varchar(50) , @Int


integer OUTPUT
AS

DECLARE @Power Bint
, @HexString varchar(15)

SET @HexString = '123456789ABCDEF'
SET @Power = 0
SET @Int = 0

WHILE LEN(@HexVal) <> 0 AND UPPER(RIGHT(@HexVal,1))


<> 'X'
BEGIN
SET @Int = @Int + (CHARINDEX(RIGHT(@HexVal,


1),@HexString) * POWER(16,
@Power))
SET @Power = @Power + 1
SET @HexVal = SUBSTRING(@HexVal, 1, LEN(@HexVal)-1)
END

Exemple d'utilisation

DECLARE @int integer
EXECUTE spHexToInt '0x20', @Int = @int OUTPUT
PRINT @int

Nicolas.


"Laurent L." a


écrit dans le message
de news:e98f01c3f088$27a35560$
Bonjour,

avec l'analyseur de requête je voudrais créer un script
pour convertir des nombres hexadecimal (40bits) en
decimal.
Une fonction de type HEXDEC (EXCEL) est elle disponible
avec Transact SQL?

Merci


.



Avatar
Steve Kass
Laurent,

Une autre solution, utilisant une table auxiliaire d'entiers:

create table N100 (
N int not null primary key
)
insert into N100
select top 100 OrderID-10248
from Northwind..Orders
go

declare @data table (
s varchar(20)
)
insert into @data values ('0x73b4210d7f')
insert into @data values ('0xff')
insert into @data values ('0x01017B38B3')
insert into @data values ('0x100000000')

select
s,
sum(power(cast(16 as bigint),N - 1)
* charindex(substring(reverse(s),N,1),'123456789abcdef'))
from N100, @data
where N < len(s) - 1
group by s
go

drop table N100

SK

Laurent L. wrote:

J'ai essayé la procédure, mais malheureusement une donnée
de type int ne peut exéder 2147483647.
Il me faudrait en fait renseigner un champs de type
varchar avec la valeur décimale de la donnée héxa.
Exemple : 0x01017B38B3 = 4319819955 en décimal
4319819955 > 2147483647

Mais là je suis un peu juste au niveau SQL.
Quelqu'un connait il une astuce?



-----Message d'origine-----
Réponse de Steve Sturgis trouvée sur Google :

CREATE PROCEDURE spHexToInt @HexVal varchar(50) , @Int




integer OUTPUT


AS

DECLARE @Power Bint
, @HexString varchar(15)

SET @HexString = '123456789ABCDEF'
SET @Power = 0
SET @Int = 0

WHILE LEN(@HexVal) <> 0 AND UPPER(RIGHT(@HexVal,1))




<> 'X'


BEGIN
SET @Int = @Int + (CHARINDEX(RIGHT(@HexVal,




1),@HexString) * POWER(16,


@Power))
SET @Power = @Power + 1
SET @HexVal = SUBSTRING(@HexVal, 1, LEN(@HexVal)-1)
END

Exemple d'utilisation

DECLARE @int integer
EXECUTE spHexToInt '0x20', @Int = @int OUTPUT
PRINT @int

Nicolas.


"Laurent L." a




écrit dans le message


de news:e98f01c3f088$27a35560$
Bonjour,

avec l'analyseur de requête je voudrais créer un script
pour convertir des nombres hexadecimal (40bits) en
decimal.
Une fonction de type HEXDEC (EXCEL) est elle disponible
avec Transact SQL?

Merci


.