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

Requêtes MySQL Discussion :

Problème sur sélection après tri alphanumérique


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Problème sur sélection après tri alphanumérique
    Version server : 10.1.37-MariaDB-0+deb9u1 Debian 9.6

    Bonjour,

    je cherche à sélectionner une partie d'une colonne triée comme ceci (je remarque déjà que j'obtiens une erreur sur les enregistrements contenant des lettres !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SELECT numero FROM Prestation ORDER BY CAST(numero AS UNSIGNED), numero;
    +--------+
    | numero |
    +--------+
    | 1      |
    | 1b     |
    | 12b    |
    | 123    |
    | 123az  |
    | 123b   |
    | 123b   |
    | 123bis |
    | 123G   |
    | 125    |
    | 234    |
    | 1234   |
    | 1234   |
    | 12345  |
    | 12345b |
    +--------+
    15 rows in set, 8 warnings (0.00 sec)
    Je voudrais récupérer uniquement les enregistrements (triés identiquement) avec numero > '<critère>'. Par exemple, si j'indique le critère à '123', obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    +--------+
    | numero |
    +--------+
    | 123az  |
    | 123b   |
    | 123b   |
    | 123bis |
    | 123G   |
    | 125    |
    | 234    |
    | 1234   |
    | 1234   |
    | 12345  |
    | 12345b |
    +--------+
    J'ai essayé cela mais ça ne fonctionne pas, il manque toutes les valeurs 123xxx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT numero FROM Prestation WHERE numero > CAST('123' AS UNSIGNED)  ORDER BY CAST(numero as UNSIGNED), numero;
    +--------+
    | numero |
    +--------+
    | 125    |
    | 234    |
    | 1234   |
    | 1234   |
    | 12345  |
    | 12345b |
    +--------+
    Est ce que quelqu'un à une idée pour résoudre ce problème ?

    Merci d'avance pour vos retours,

    ar.ro.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 111
    Points : 28 466
    Points
    28 466
    Par défaut
    Ce mélange entre valeur numérique et code alphanumérique n'est pas très clair...
    Tu cherches les codes dont la portion numérique est numériquement supérieure à la valeur numérique 123 ?
    Ce qui exclurait par exemple le code '23a' qui est alphabétiquement supérieur mais numériquement inférieur ?
    C'est bien ça ?

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    Mettez en majuscule et remplacez tous les caractères de votre "numérotation", un par un, par leur code ASCII formaté sur 3 chiffres.

    Exemple ;

    "11B" devient : 001001066

    Et votre tri deviendra correct.

    A +

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Ce mélange entre valeur numérique et code alphanumérique n'est pas très clair...
    Tu cherches les codes dont la portion numérique est numériquement supérieure à la valeur numérique 123 ?
    Ce qui exclurait par exemple le code '23a' qui est alphabétiquement supérieur mais numériquement inférieur ?
    C'est bien ça ?
    bonjour al1_24,

    Merci pour votre réponse.
    en fait il s'agit de nombres qui peuvent être augmentés de lettres. Le tri se fait d'abord sur les nombres puis sur les lettres.
    Pour exemple d'une liste ordonnée : 1, 1bis, 1ter, 2, 3, 4, ... 25, 25bis, ... 43A, 50B, ...

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Mettez en majuscule et remplacez tous les caractères de votre "numérotation", un par un, par leur code ASCII formaté sur 3 chiffres.

    Exemple ;

    "11B" devient : 001001066

    Et votre tri deviendra correct.

    A +
    Bonjour SQLpro,

    merci pour cette approche, je vais tester cela.

    Cdt.

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 111
    Points : 28 466
    Points
    28 466
    Par défaut
    Est-ce que cela ne suffirait pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT numero FROM Prestation WHERE cast(numero AS UNSIGNED) >= CAST('123' AS UNSIGNED)  ORDER BY CAST(numero as UNSIGNED), numero;

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    non, malheureusement, j'ai déjà testé beaucoup de combinaisons...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    SELECT numero FROM Prestation WHERE cast(numero AS UNSIGNED) >= CAST('123' AS UNSIGNED) ORDER BY CAST(numero as UNSIGNED), numero;
    +--------+
    | numero |
    +--------+
    | 123    |
    | 123az  |
    | 123b   |
    | 123b   |
    | 123bis |
    | 123G   |
    | 125    |
    | 234    |
    | 1234   |
    | 1234   |
    | 12345  |
    | 12345b |
    +--------+
    SELECT numero FROM Prestation WHERE cast(numero AS UNSIGNED) >= CAST('123az' AS UNSIGNED) ORDER BY CAST(numero as UNSIGNED), numero;
    +--------+
    | numero |
    +--------+
    | 123    |
    | 123az  |
    | 123b   |
    | 123b   |
    | 123bis |
    | 123G   |
    | 125    |
    | 234    |
    | 1234   |
    | 1234   |
    | 12345  |
    | 12345b |
    +--------+

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 111
    Points : 28 466
    Points
    28 466
    Par défaut
    Dans cet exemple quelles sont les lignes qui auraient dû être retournées ?

  9. #9
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 830
    Points : 1 591
    Points
    1 591
    Par défaut
    et un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT numero 
    FROM Prestation 
    WHERE numero  like '123%' 
    ORDER BY numero;
    ça donne quoi ?

Discussions similaires

  1. [XL-2013] Problème de sélection après usage d'une macro ActiveWorkbook.Save
    Par jc-macintosh dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2017, 11h08
  2. Conserver la sélection sur une cellule après tri
    Par alolaterre dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/10/2015, 18h45
  3. Problème sur sélection de la première ligne vide
    Par atk_49 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/12/2013, 12h16
  4. Problème de sélection après filtre si 0 occurrence du filtre
    Par mister_vba dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/11/2013, 17h16
  5. [AC-2007] Problème sur sélection d'une combobox
    Par Vhalar dans le forum VBA Access
    Réponses: 8
    Dernier message: 05/09/2011, 15h56

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