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

Développement SQL Server Discussion :

PATINDEX renvoi t il un entier ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut PATINDEX renvoi t il un entier ?
    Bonjour

    J'ai utilisé PATINDEX pour trouver la position d'un caractère dans un champ de manière à pouvoir faire un LEFT.
    Le problème est que je voudrais qu'il me fasse le LEFT sur le caractère juste avant celui que je trouve, donc je me suis dit qu'en faisant un -1, ça marche bien.

    PERDU !

    Voici le code qui plante et le message d'erreur à la suite.
    Mon souci est que je ne comprends pas comment faire pour arriver à mes fins.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT(refmandat, PATINDEX('%/%',refmandat) - 1)
    Paramètre de longueur incorrect passé à la fonction de sous-chaîne.
    Merci pour votre aide.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select LEFT('azerty/qwerty', PATINDEX('%/%','azerty/qwerty') - 1)
    cette fonction marche tres bien. tu es sure de la taille de ton champs ?

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    Aprés analyse de mes données je m'aperçois qu'il y a deux enregistrements ou le champ est vide (mais pas pas NULL). Donc, si je suis ton raisonnement et ma découverte, le message d'erreur voudrais dire que je capte un 0 et que en faisant -1, j'obtiens un négatif, donc qu'il est pas comptant à casue de ça.

    Je pense avoir trouvé un moyen de contourner la chose en faisant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CASE (PATINDEX('%/%',refmandat))
    	WHEN 0 THEN refmandat
    	ELSE LEFT(refmandat, PATINDEX('%/%',refmandat)-1)
    END AS refmandat,
    Qu'en pense tu ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut
    Bonjour,
    une autre solution est de ne sélectionner que les lignes contenant une référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT LEFT(refmandat, PATINDEX('%/%',refmandat)-1)
    FROM <schema>.<table>
    WHERE not(refmandat IS NULL);

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide Pouy.
    Ta méthode m'a l'air bien, sauf que ne peut pas facilement l'ituliser puisqu'qu'aucun de mes chmap n'est censé avoir de NULL dedans.

    Toutefois, je pourrais l'adapter avec une rechreche de '', puisque c'est la valeur par défaut.
    Il faut que je fasse des test car la requête finale est beaucoup plus importante que ça.

    Encore Merci

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Ta méthode m'a l'air bien, sauf que ne peut pas facilement l'ituliser puisqu'qu'aucun de mes chmap n'est censé avoir de NULL dedans.
    Zut,
    tu l'avais écrit pourtant sur le post précédent... Par contre, il faut toujours tenter d'anticiper des données vides, absentes ou non conformes... Si c'est une chaine vide, tu peux jouer sur la longueur de cette chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE len([refmandat])<>0;
    Bon courage pour la suite.
    Pouy.

Discussions similaires

  1. SUM renvoie des décimaux et pas des entiers
    Par senacle dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/06/2018, 16h39
  2. renvoie de resultat en reel et non en entier
    Par hajerh dans le forum Images
    Réponses: 2
    Dernier message: 03/04/2011, 12h14
  3. Renvoi d'un tableau d'entiers
    Par Mizu_737 dans le forum C++
    Réponses: 5
    Dernier message: 15/04/2007, 11h53
  4. fonction qui renvoie le max de 3 entiers.
    Par deubelte dans le forum C++
    Réponses: 5
    Dernier message: 22/01/2007, 18h42

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