IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

requete sql sur code postal


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 104
    Par défaut requete sql sur code postal
    Bonjour

    Je me permets de vous laisser un message car j'ai une petite question concernant une sql

    Je souhaite sélectionner les adresses mails de personnes qui dont le code postal commence par 69, 38, 42

    Comment je peux faire?

    Merci de votre réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT EMAIL 
    FROM `membre` 
    WHERE `membre_cp` LIKE '69,38'

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE membre_cp LIKE '69%'
    OR membre_cp LIKE '38%''

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Ou bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE LEFT(membre_cp, 2) in ('69', '38', '42')
    A noter qu'il vaut mieux dans ce cas que :

    1/ Les codes postaux soient stockés en VARCHAR (ou CHAR(5) si possible)
    2/ Le code postal de Bourg-en-Bresse (préfecture de l'Ain, dont le CP est "1000") est stocké sous forme de "01000" et non "1000"

    Sinon, le premier t'oblige à faire une conversion implicite qui tue les perfs
    Et le second t'oblige à faire un LPAD() inutile

    Reste alors la solution numérique, si ton membre_cp est numérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE round(membre_cp / 1000) in (69, 38, 42)
    Ce sont les deux seules possibilités pour être certain de tes tests. En effet, comparer les deux premiers caractères sans 0 facultatif, ça va provoquer des confusions entre les département 01 et 10, 02 et 20, etc.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 138
    Par défaut
    Un code postal enregistré dans une colonne de type numérique est une erreur de conception !
    Un code postal n'est pas un nombre mais une chaîne de caractères composée de chiffres (les caractères entre '0' et '9').
    Le code postal de Bourg-en-Bresse n'a jamais été '1000'.
    Si tu envoies une lettre à Bourg-en-Bresse avec le code postal '1000', elle commencera par faire un détour par Troyes (code postal '10000', préfecture de l'Aube).

    Si l'expression "WHERE LEFT(membre_cp, 2) IN ('69', '38')" est agréable à lire dans l'expression de la requête, elle est malheureusement beaucoup moins efficace que "WHERE (membre_cp LIKE '69%' OR membre_cp LIKE '38%')".
    En effet, elle ne peut bénéficier de l'existence d'un index sur la colonne membre_cp pour améliorer l'accès aux données.

    Si le SGBD supporte cette expression, on pourra aussi utiliser "WHERE membre_cp LIKE ANY ('69%', '38%')" qui sera à la fois lisible et efficace.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. SQL LIKE et Expression régulière sur Code postal
    Par framus.class dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/12/2009, 13h31
  2. Requete SQL sur table dbase et date du jour
    Par Jean-François PETIT dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/03/2005, 10h31
  3. Ecrire une requete SQL sur plusieurs lignes
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 15h47
  4. requete sql sur un grand nombre d enregistrement
    Par marielaure dans le forum Langage SQL
    Réponses: 5
    Dernier message: 13/08/2004, 12h53
  5. Réponses: 2
    Dernier message: 03/05/2004, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo