vendredi 10 septembre 2010
StrToNum ou comment convertir une chaine en nombre ?
Dans la rubrique Mysql
Dans Sphinx, les filtres doivent être scalaires. J'avais donc un problème pour obtenir une version numérique d'un code pays.
ASCII(str) transforme le premier caractère de votre chaine en nombre.
Mais comment faire pour avoir un nombre différent pour 2 chaines ayant le même premier caractère ?
J'étais parti dans un délire :
ASCII(code)-65 + (ASCII(substr(code,1,0)-65+26) ...
Puis j'ai un peu regratté la doc et j'ai trouvé HEX()
HEX(N_or_S)
Si N_OR_S est une chaîne de caractères, cette fonction retournera une chaîne de caractères hexadécimale de N_OR_S où chaque caractère de N_OR_S est converti en 2 chiffres hexadécimaux.
edit: Je n'ai par contre pas encore trouvé d'équivalent PHP.
En PHP on a bin2hex. pour obtenir la même chose.
SELECT HEX('hello'),HEX('ZZ'),HEX('0A'),HEX(0xA);
HEX('hello') HEX('ZZ') HEX('0A') HEX(0xA)
------------ --------- --------- --------
68656C6C6F 5A5A 3041 0A
HEX('php') HEX('PHP') HEX('Php')
---------- ---------- ----------
706870 504850 506870
HEX('aa') HEX('ab') HEX('AA') HEX('AB') HEX('ZZ')
--------- --------- --------- --------- ---------
6161 6162 4141 4142 5A5A
Edit (2010-09-30)
Visiblement mon blog est très lu : je dit une grosse connerie et personne le remarque.
Mon objectif présenté ici est de transformer une chaîne en nombre et la solution que je présente ne donne pas le résultat escompté.
En effet HEX('ZZ') -> 5A5A reste une chaine (0x5A5A est un nombre)
Donc pour finaliser le travail il faut reconvertir le hex en dec
avec CONV(leresultat, 16, 10) en mysql et avec hexdec() en php (et pas hex2dec )


2
-![[T]](http://static.technorati.com/pix/icn-talkbubble.gif)






