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

DB2 Discussion :

Utilisation du LIKE sur des variables de type integer castées en CHAR


Sujet :

DB2

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Utilisation du LIKE sur des variables de type integer castées en CHAR
    Bonjour à tous, je me suis inscrit sur ce forum qui me semble très actif

    Je connais actuellement quelques problèmes sur des requêtes utilisant le mot clé LIKE, sur des donnés de type INTEGER : J'aimerais afficher toutes les données d'une table EMPLOYÉ lorsque l'identifiant de l'employé se termine par 1.

    La variable ID_EMP est un INTEGER de taille 10.

    Pour se faire voici la requête qui a été développée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT ID_EMP, CAST(ID_EMP AS CHAR(10))
    FROM DB.TE_EMP
    WHERE ID_EMP IN (1,10797,81,2881,120741)
    AND CAST(ID_EMP AS CHAR(10)) LIKE '%1'
    WITH UR
    Si je mets en commentaire la 4ème ligne, cela m'affiche toutes les données, ce qui me permet d'affirmer les ID_EMP est bien casté en CHAR.

    Si je dé-commente la 4ème ligne, le résultat retourné est 0 lignes, Empty result set fetched donc aucune donnée n'est trouvée alors que je m'attends à avoir 4 lignes retournée. Je pense que le problème vient du LIKE et du '%1', peut-être du simple quote qui déglingue le symbole %.

    Si ma contrainte est = '81' au lieu de LIKE '%1' alors j'ai bien un résultat.

    Donc sur le coup, je sèche un peu et je ne vois pas d'autre façon d'afficher les employés se terminant par 1.

    Est-ce que quelqu'un aurait une idée sur la manière d'agir pour arriver au résultat souhaité ? Merci d'avance pour la lecture de ce message et pour votre aide.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... AND TRIM( CAST ( ID_EMP AS CHAR( 10 ) ) ) LIKE '%1' ...
    car la fonction CAST AS CHAR supprime les zéros non significatifs et cadre à GAUCHE dans la zone castée. La fonction TRIM() supprimera les blancs à gauche et à droite de la zone castée qui deviendra donc cohérente avec ce que tu cherches à faire.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Merci pour ta réponse Mercure, malheureusement cela me renvoie une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [Error Code: -440, SQL State: 42884]  
    No authorized routine named "TRIM" of type "FUNCTION" having 
    compatible arguments was found.
    Je vais analyser l'erreur renvoyée, et essayer de la comprendre.

  4. #4
    Membre éclairé Avatar de Peut-êtreUneRéponse
    Homme Profil pro
    IT Specialist - IBM Z
    Inscrit en
    Décembre 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : IT Specialist - IBM Z
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 548
    Points : 801
    Points
    801
    Par défaut
    RTRIM

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Englober le bloc CAST dans le bloc RTRIM a permis de réussir la requête et d'afficher le résultat attendu.
    Merci beaucoup pour vos réponses très rapides et efficaces.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Grrr...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Plus simplement :

    ...AND RIGHT(ID_EMP, 1) = 1

    ainsi pas besoin de casting

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    En es-tu bien sûr ?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Tu m'as fais douté alors j'ai essayé, et pas de prb sur toutes sortes de zones char, num...

  10. #10
    Membre éclairé Avatar de Peut-êtreUneRéponse
    Homme Profil pro
    IT Specialist - IBM Z
    Inscrit en
    Décembre 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : IT Specialist - IBM Z
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 548
    Points : 801
    Points
    801
    Par défaut
    Citation Envoyé par K2R400 Voir le message
    Tu m'as fais douté alors j'ai essayé, et pas de prb sur toutes sortes de zones char, num...
    Quelle version de DB2? En v8 : The string must be a character, graphic, or binary string.... pas integer.

    Chez moi ça ne fonctionne pas (-171, ERROR: THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT 1 OF RIGHT IS INVALID)

    .

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Également en V8 et le message d'erreur est le même que Peut-êtreUneRéponse.

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    K2R400,
    Tu as testé le "RIGHT(ID_EMP, 1) = 1" avec SQL/400, pas avec SQL DB2-V8 des mainframes. Et même avec SQL/400, ça ne marche que si le dernier chiffre est égal à x'01'.

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Oups désolé, je suis sur iSeries V5R4.
    Le right marche bien, quelque soit le type de zone testée, avec RIGHT(xxxx, 1) = "1" pour de l'alpha bien sûr, et RIGHT (xxxx, 1) = 1 pour tout numérique.

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut MOD
    c'est preferable de utiliser la function MOD pour le integerm sans utiliser le CHAR

    SELECT ID_EMP, CAST(ID_EMP AS CHAR(10))
    FROM DB.TE_EMP
    WHERE ID_EMP IN (1,10797,81,2881,120741)
    AND MOD (ID_EMP,10) = 1
    WITH UR

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Bravo ! C'est bien mieux avec le modulo, en effet.

  16. #16
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonsoir à tous. N'étant pas devant mon poste de travail, je ne peux tester les performances du MOD (ID_EMP,10) = 1, mais je suppose que cela est plus performant que le CAST dans un bloc RTRIM. Est-ce que vous êtes d'accord avec moi ?

    Merci d'avance pour vos retours

  17. #17
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    C'est très probable, en effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 03/01/2008, 22h42
  2. [RegEx] utilisation de preg_replace sur des balises
    Par Kerod dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2005, 13h46
  3. Réponses: 5
    Dernier message: 13/07/2005, 10h03
  4. [DB2] LIKE sur des entiers
    Par heloise dans le forum DB2
    Réponses: 1
    Dernier message: 07/10/2004, 23h30
  5. Réponses: 4
    Dernier message: 15/12/2002, 04h19

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