Hello,
Je me pose une question (peut-être qu'il existe une réponse simple
), voilà mon cas :
Je cherche à convertir en hexadécimal une valeur entière (bigint) et j'ai fait plusieurs tests, dont celui-ci qui me laisse perplexe :
SELECT CONVERT(bigint, 0xFFFFFFFF)
=> 4294967295 (parfait, logique c'est la valeur maximale sur 4 octets)
Maintenant si je fais l'inverse pour retrouver ma valeur hexadécimal :
SELECT CONVERT(varbinary(4), 4294967295)
=> 0x0A000001
alors que je m'attendais à avoir 0xFFFFFFFF
Du coups j'ai poussé à 8 octets :
SELECT CONVERT(varbinary(8), 4294967295)
=> 0x0A000001FFFFFFFF 
je ne comprends pas !
Maintenant en castant ma valeur en bigint, j'obtiens le bon résultat :
SELECT CONVERT(varbinary(4), CAST(4294967295 AS bigint))
=> 0xFFFFFFFF 
Du coup la question est : Comment le moteur SQL interprète t il la valeur brute 4294967295 ??
Partager