Nous sommes le Mer 23 Juil, 2025 19:45
Supprimer les cookies

[MySQL] Selection d'un caractère dans une chaîne

Sur le logiciel libre en général ou un logiciel libre en particulier

Jeu 23 Mars, 2006 23:44

Bonjour,

Voilà mon problème est tout simple, je voudrais savoir s'il était possible d'extraire un seul caractère d'une chaine (ou d'un nombre).

Par exemple en PHP, si j'ai $var = 95623; alors ($var[1] == 5).
J'aimerai donc faire la même chose en MySQL, à savoir que si le contenu du champ table.champ est 95623, trouver la fonction qui retourne 5 en lui donnant fonction(table.champ,2).

Si c'est pas clair, n'hésitez pas à le dire, j'ai bien conscience que j'ai du mal à l'expliquer ^^

Merci :)
Stabb

Messages : 347

Ven 24 Mars, 2006 08:27

Bonjour

On peut effectivement faire l'équivalent, c'est à dire une extraction d'une partie de chaine avec la commande substring :
en mode console, on peut essayer ceci :
select substring( 'azerty' , 3 , 2);
ce qui renverra : 'er'

en fait, on va retrouver la plupart des fonctions des autres langages ...
Mais naturellement, tout ceci est dans la doc :)

http://www.nexen.net/index.php?option=c ... ctions.php

Cordialement
Damien
damien

Messages : 208

Ven 24 Mars, 2006 11:27

En effet, ca m'avait échappé dans la doc.
Sans doute parce que je cherchais une fonction d'une autre forme (comme l'exemple PHP que j'ai mis).

En tous cas merci beaucoup :)

Maintenant juste une question en passant.
Si j'ai un nombre de quatres chiffre, où chaque chiffre est une variable allant de 0 à 9.
Vaut-il mieux stocker ce chiffre dans une SMALLINT ou les stocker un par un dans 4 CHAR(1) ou dans 4 TINYINT ?
Je suppose que stocker les 4 d'un coup serait plus léger, mais côté utilisation, ca risque de ralentir mes requêtes.
Stabb

Messages : 347

Ven 24 Mars, 2006 12:23

Re...

4 chiffres, on va donc de 0 à 9999 ce qui tient sans problème dans un seulsmallint. Maintenant, ce qu'il faut voir c'est ce que l'on veut priviligier : taille sur disque, temps de réponse ou facilité de dev. Tout ceci dépend de ce pour quoi est fait la base ...
Pour le smallint, pour remettre en forme le nombre, on utilise printf en php.

Cordialement
Damien
damien

Messages : 208

Ven 24 Mars, 2006 14:09

En effet, étant donné que les 4 chiffres sont là pour faire des tris (ce sont des coordonnées), mes requêtes risquent d'être un peu du bricolage si je les mets tous ensemble dans un SMALLINT.
Il vaut certainement mieux dans ce cas que je les sépare.
Sinon, étant donné que ce sont des coordonnées, je peux les regrouper par 2 et faire deux TINYINT seulement. Comme les coordonnées marchent par deux, ca me donne des tests parfaitement clairs, rapides et optimisés.

Là je crois que (d'en parler) j'ai atteint la meilleure optimisation possible de cette partie de ma table, aussi bien niveau temps de réponse que taille occupée et facilité de dev !
Je vais faire comme ca, je suis maintenant satisfait !

Merci beaucoup pour tes conseils :)
Stabb

Messages : 347

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit