[sql - access] If et IsNumeric

Résolu/Fermé
Velvel-Miho Messages postés 32 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 20 mars 2008 - 20 févr. 2008 à 13:24
Velvel-Miho Messages postés 32 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 20 mars 2008 - 21 févr. 2008 à 14:32
Bonjour bonjour,

J'ai un petit problème sur une requête access.
C'est pour faire une insertion avec un SELECT, mais ça, ça fonctionne.
Le truc, c'est que j'ai un champ "libelleMouvement". Ce champ est composé d'un numéro de facture à 7 chiffre et d'un libellé. J'aimerais donc le tout dans une autre table (d'où l'insertion) en séparant le numéro et le libellé.

Pour ça rien de plus sorcier que d'utiliser un MID, LEFT, RIGHT ou LEN.
Mais voilà, le champ libellé ne possède pas toujours de numéro de facture. Donc la solution que j'ai pensé, est de vérifier s'il y a bien un numéro pour savoir s'il faut fragmenter le champ libelleMouvement.


En simplifiant ma requête, ça me donne :
(la clé primaire est un numéroAuto)
- en ne séparant pas et fonctionnant :
INSERT INTO T_MOUVEMENT (libelMV,factMv)
SELECT libelleMouvement, "NULL" FROM TABLE_IMPORT;

- mais je voudrais faire un truc du genre :
INSERT INTO T_MOUVEMENT (libelMv, factMv)
SELECT (If IsNumeric( LEFT(libelleMouvement, 7) ) Then RIGHT(libelleMouvement, LEN(libelleMouvement) - 8) Else libelleMouvement End If),
(If IsNumeric( LEFT(libelleMouvement, 7) ) Then LEFT(libelleMouvement, 7) Else "NULL" End If)
FROM TABLE_IMPORT;


Au final, il semblerais que la fonction If passe.
J'obtient le message d'erreur "Erreur de syntaxe (opérateur absent) dans l'expression", et me surligne "IsNumeric".

Serait t'il possible de faire fonctionner cette requête correctement, ou bien existe t'il un autre moyen ?



Rappel n°1 : IsNumeric("le champ") renvoie Vraie si "le champ" est numérique.
Exemple : IsNumeric( 123 ) = Vraie, IsNumeric ( "abc" ) = Faux

Rappel n°2 pour ceux qui ne connaisse pas :
Les quatres fonctions cités ci-dessus existent dans tous les codes que j'ai pu rencontré en variant un peu (par exemple, on trouve LENGHT à la place de LEN), et fonctionne très bien en SQL (pratique pour les formats de date)
fonction MID : (ou milieu/midle) MID("le champ", "caractère début (:entier)", "longueur (:entier)" )
Récupère une partie du champ ou variable. Exemple : MID("abcdef", 3, 2) = "cd"
fonction LEFT : (ou gauche) LEFT("le champ", "longueur (:entier)")
Récupère la partie de gauche du champ ou variable. Exemple : LEFT("abcdef", 2) = "ab"
fonction RIGHT : (ou droite) RIGHT("le champ", "longueur (:entier)")
Récupère la partie de droite du champ ou variable. Exemple : RIGHT("abcdef", 2) = "ef"
fonction LEN : (ou longueur/lenght) LEN("le champ")
Renvoie la longueur (entier) du champ ou variable. Exemple : LEN("abcdef") = 6
A voir également:

6 réponses

Remplace par (Iif(IsNumeric(left(libelleMouvement,7));left(libelleMouvement,7);0))
Et teste...
0
Bonjour

Je peux me tromper, mais faudrait peut-être pas mélanger les genres

IF, MID, RIGHT, LEFT, LEN existent en basic et en SQL
LENGTH (et non pas LENGHT) est du SQL
IsNumeric est du Basic

Pas la peine d'essayer de mettre du basic dans une requête SQL
0
Velvel-Miho Messages postés 32 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 20 mars 2008 21
20 févr. 2008 à 13:50
Apparement, il n'aprécis pas trop les points-virgules. Mais il semblerais qu'en mode création il est reconnu IsNumeric (=EstNum).
Parfois j'ai l'impression de tourner en rond ...
0
Velvel-Miho Messages postés 32 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 20 mars 2008 21
20 févr. 2008 à 14:01
Pas de points-virgules, pas de virgules, pas de then-else-endif ...

Est ce qu'au moins la fonction IF peut être utilisé en SQL ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pas IF mais IIF(CONDITION;SI VRAI;SI FAUX)
0
Velvel-Miho Messages postés 32 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 20 mars 2008 21
21 févr. 2008 à 14:32
Autant pour moi.

Je croyais que tu avait fait une faute de frappe (ça peut arriver à tout le monde)
Apparament ça fonctionne! Merci bnb.
Pour ceux qui veulent, en mode création, il le traduit par "VraiFaux( ; ; )", et c'est Iif avec 2 I.
0