[sql - access] If et IsNumeric
Résolu
Velvel-Miho
Messages postés
32
Statut
Membre
-
Velvel-Miho Messages postés 32 Statut Membre -
Velvel-Miho Messages postés 32 Statut Membre -
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
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:
- [sql - access] If et IsNumeric
- Acer quick access - Forum Logiciels
- Access appdata - Guide
- Logiciel sql - Télécharger - Bases de données
- Exemple base de données access à télécharger gratuit - Forum Access
- Exemple base de données Access de gestion ✓ - Forum Logiciels
6 réponses
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
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
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 ...
Parfois j'ai l'impression de tourner en rond ...
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 ?
Est ce qu'au moins la fonction IF peut être utilisé en SQL ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question