Consulta de selección entre dos valores

machaons -  
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   -
En Access 2003, si tu as un champ de type texte contenant des valeurs sous la forme "mini à maxi" (par exemple "17 à 23") et tu veux sélectionner les enregistrements dont ces valeurs se situent entre deux nombres que tu specifies (mini et maxi inclus), ce sera plus complexe avec une colonne texte. Voici des options et des idées de requêtes.

Option 1 — modifier le type de champ (recommandée)
- Convertir le champ en deux nombres séparés: Mini et Maxi, ou en un seul champ numérique et une logique adaptée.
- Avantages: facilitation des requêtes, indexation, performances.

Option 2 — garder le champ texte mais extraire les nombres dans la requête
- Utiliser des expressions pour extraire les nombres et les comparer.
- Par exemple, si le champ s’appelle [Range] et contient "17 à 23", on peut tenter d’extraire le premier nombre et le deuxième nombre avec des fonctions Mid, InStr, Val, etc.
- Exemple possible (à adapter selon le format exact et les données):
- Mini: Val(Left([Range], InStr([Range]," à ")-1))
- Maxi: Val(Mid([Range], InStr([Range]," à ")+len(" à "), Len([Range])))
- Puis faire une condition du type:
- Where Val(Left([Range], InStr([Range]," à ")-1)) >= [MiniRequest] And Val(Mid([Range], InStr([Range]," à ")+4, Len([Range]))) <= [MaxiRequest])
- Attention: syntaxe Access 2003 utilise des fonctions VB accessibles dans les requêtes, et tu dois t’assurer que tous les enregistrements suivent le même format exact ("X à Y" avec espaces).

Exemple de requête (à adapter si le séparateur est exactement " à "):
- Sélectionner les enregistrements où le mini est >= [Mini] et le maxi <= [Maxi]:
- Where Val(Left([Range], InStr([Range]," à ")-1)) >= [Mini]
- And Val(Mid([Range], InStr([Range]," à ")+4, Len([Range]))) <= [Maxi]

Option 3 — indexation et comparaison directe si format simple
- Si le champ contient une valeur numérique unique, ou un ratio/intervalle standard, tu peux écrire:
- Where [Range] Between [Mini] And [Maxi]
- Mais cela ne fonctionne que si Range peut être interprété comme deux nombres ou une valeur numérique unique.

Recommandation pratique
- Le plus simple et fiable: créer deux nouveaux champs numériques: [Mini] et [Maxi], et, si nécessaire, migrer les données existantes pour peupler ces champs.
- Ensuite, ta requête sera straightforward:
- Where [Mini] >= [MiniParam] And [Maxi] <= [MaxiParam]
- Ou Between [MiniParam] And [MaxiParam] selon le sens voulu.

Exemple de migration rapide (conceptuel)
- Ajoute deux champs numériques: Mini et Maxi.
- Met à jour chaque enregistrement: Mini = Valeur à gauche avant " à ", Maxi = Valeur à droite après " à ".
- Crée des index sur Mini et Maxi si tu fais beaucoup de recherches.

Si tu veux, donne un exemple précis de contenu du champ Range (quelques lignes), et on te rédige la requête exacte adaptée à Access 2003.

1 respuesta

  1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Embajador 1 588
     
    si entiendo bien, tienes un campo en una tabla de una base Access.
    ¿cuál es el tipo de ese campo?
    ¿puedes dar un ejemplo de lo que contiene ese campo para varios registros de tu tabla?
    ¿qué pasa después? ¿has escrito ya una consulta, o no?
    supongo que, cuando escribes "chiffre", hay que leer "nombre".
    quieres darle un número a la consulta, y luego escribes "entre estos dos valores". ¿cuáles son esos dos valores?
    no dudes en usar ejemplos para explicarte.
    0