Translate

2011-03-14

Comment reconnaitre en une seule requête SQL l'indicatif d'un numéro de téléphone

Mettons une table d'indicatifs:

Pays | Indicatif
-------------------
Pays0 | 2
Pays1 | 21
Pays2 | 212
Pays3 | 213
Pays4 | 3
Pays 5 | 321

Une table d'appels

IdAppel | NumCorrespondant
-------------------------------
1 | 276543
2 | 214525
3 | 213987
4 | 365145
5 | 321458

Est il possible en une seule requête, de trouver le pays selon l'indicatif, la difficulté ici est évidemment que l'indicatif n'est pas de longueur fixe, et sa longueur n'est pas limitée.

IdAppel | NumCorrespondant | Pays
---------------------------------------
1 | 276543 | Pays0
2 | 214525 | Pays1
3 | 213987 | Pays3
4 | 365145 | Pays4
5 | 321458 | Pays5


La solution elle est la !
L'astuce étant une sous requête qui sélectionne tous les pays pouvant correspondre a l'indicatif mais ne garde que le plus long, donc le plus correspondant!

SELECT IdAppel,NumCorrespondant,
(
SELECT Pays
FROM Indicatifs
WHERE Indicatif = LEFT(NumCorrespondant,length(Indicatif))
ORDER BY length(Indicatif) DESC
LIMIT 1
)
FROM Appels


en espérant que ca puisse être utile a quelqu'un, si quelqu'un en revanche connait mieux, je suis preneur.

No comments: