Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/04/2007, 14h59   #1
Futur Membre du Club
 
Inscription : mai 2003
Messages : 71
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 71
Points : 17
Points : 17
Par défaut [TSQL]convertir un int en un hexadecimal de 9 caractères

J'ai besoin de convertir des entiers en des hexadecimaux de 9 caractères.
J'ai testé la fonction INTTOHEX()

par exemple:

Citation:
SELECT INTTOHEX(100)
J'obtiens 00000064

la conversion fonctionne bien...mais comment obtenir un hexadecimal sur 9 caractères en passant sql (j'ai pas moyen de faire autrement)

c'est à dire obtenir 000000640
antigone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 15h23   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Je comprends pas très bien pourquoi tu veux obtenir 000000640 plutôt que 00000064 - vu que 640 hexa != 100 decimal...

Mais tu peux évidemment faire
Code :
1
2
3
4
5
 
SELECT inttohex(100)+'0';
 
 ---------
 000000640
(mais à mon avis je n'ai pas compris la question :-)

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2007, 15h27   #3
Futur Membre du Club
 
Inscription : mai 2003
Messages : 71
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 71
Points : 17
Points : 17
oui en fait j'ai donné 100 comme exemple.
mais je peux avoir un hexadecimal de taille allant de 1 à 9
dans le cas ou sa taille est inférieure à neuf, il faut que je complète par des 0
antigone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 09h27   #4
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Il faut complèter à gauche ou à droite ?

Si c'est à gauche (ce qui me semble plus logique):

Code :
1
2
 
SELECT replicate('0', 9 - char_length(inttohex(DATA))) + inttohex(DATA)
où "data" est la valeur décimale à convertir.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 10h08   #5
Futur Membre du Club
 
Inscription : mai 2003
Messages : 71
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 71
Points : 17
Points : 17
merci beaucoup...

Autre question,
en fait ce n'est pas un int que je dois convertir en hexadecimal...mais un numeric(18)

et ca passe pas pour les int dont la longueur est supèrieure à 8

par exemple

Citation:
select INTTOHEX(96258588887) donne
Error: com.sybase.jdbc3.jdbc.SybSQLException: Arithmetic overflow during implicit conversion of NUMERIC value '96258588887' to a INT field .
, SQL State: ZZZZZ, Error Code: 247


Y a t il une autre méthode pour convertir n'importe quel entier en hexadecimal.

j'ai testé

Citation:
SELECT CONVERT(VARBINARY(8), 16777215)
et ca me donne 46 46 46 46 46 46 30 30
:-(
antigone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 11h53   #6
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Est-ce que tu serais par hasard en ASE 15 ?

Si oui tu peux utiliser la fonction biginttohex().

Autrement il faut que je cherche un peu...

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 13h20   #7
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Peut-être que bintostr() (qui est "non-documentée") peut marcher:
Code :
1
2
3
4
5
6
7
 
[35] TEST.master.1> SELECT bintostr(convert(varbinary, 96258588887));
 
 ------------------------------------------------------------
 0016697580d7
 
(1 row affected)
Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 13h38   #8
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Citation:
Envoyé par antigone

Y a t il une autre méthode pour convertir n'importe quel entier en hexadecimal.

j'ai testé

SELECT CONVERT(VARBINARY(8), 16777215)

et ca me donne 46 46 46 46 46 46 30 30
:-(
Tu dois être sur du Windows ou autre platforme "small-endian".

Si tu passe par un convert(numeric) cela devrait marcher:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
[24] WIN_TEST.master.1> SELECT @@version;
 
 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Adaptive Server Enterprise/12.5.3/EBF 12875 ESD#4/P/NT (IX86)/OS 4.0/ase1253/1/32-bit/OPT/Thu Sep 08 11:27:35 2005 
 
(1 row affected)
[25] WIN_TEST.master.1> SELECT bintostr(CONVERT(VARBINARY, convert(numeric, 16777215)));
 
 ------------------------------------------------------------
 000000000000ffffff
 
(1 row affected)
ce qui semble correcte.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h24.


 
 
 
 
Partenaires

Hébergement Web