[Requete SQL] requete sql entr des dates/heur
ZOUZOU
-
ZOUZOU -
ZOUZOU -
bonjour,
je programme en vba sous access.
Je dispose d'une table nommée TOUT avec des champs DATEAPPEL et HEUREAPPEL.
Je souhaite generér une requete qui selectionne toutes les fiches d'appels ,par ex ,comprise entre le 04/09 09:00 et le 05/09 12:00.
Mon souci c'est que je dispose de 2 champs separés DATE et HEURE.
Voici ma requete
req1 = "SELECT TOUT.MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE (((TOUT.DATEAPPEL) between DATEDEBUT AND DATEFIN) "
req1 = req1 + " AND ((TOUT.HEUREAPPEL)between HEUREDEBUT AND HEUREFIN)"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
'**
DoCmd.RunSQL (req1)
Elle fonctionne mais elle me prend que les appels du 04/09 de 09h à 12h et du 05/09 de 09h a 12h.
Ce qu'il me faut c'est c'est les appels du 04/09 09h au 05/09 12h
Merci pour votre aide
je programme en vba sous access.
Je dispose d'une table nommée TOUT avec des champs DATEAPPEL et HEUREAPPEL.
Je souhaite generér une requete qui selectionne toutes les fiches d'appels ,par ex ,comprise entre le 04/09 09:00 et le 05/09 12:00.
Mon souci c'est que je dispose de 2 champs separés DATE et HEURE.
Voici ma requete
req1 = "SELECT TOUT.MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE (((TOUT.DATEAPPEL) between DATEDEBUT AND DATEFIN) "
req1 = req1 + " AND ((TOUT.HEUREAPPEL)between HEUREDEBUT AND HEUREFIN)"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
'**
DoCmd.RunSQL (req1)
Elle fonctionne mais elle me prend que les appels du 04/09 de 09h à 12h et du 05/09 de 09h a 12h.
Ce qu'il me faut c'est c'est les appels du 04/09 09h au 05/09 12h
Merci pour votre aide
A voir également:
- [Requete SQL] requete sql entr des dates/heur
- Logiciel sql - Télécharger - Bases de données
- Nombre de jours entre deux dates excel - Guide
- Requête sql pour afficher uniquement les fleurs dont le prix est strictement inférieur à 10 euros - Forum calculatrices
- Sql (+) - Forum Programmation
- Cherche des haricot vendez les moi ✓ - Forum DS
3 réponses
Salut,
il faut mettre des parenthèses et enlever le between, ça doit donner un truc comme ça :
il faut mettre des parenthèses et enlever le between, ça doit donner un truc comme ça :
WHERE ((DATEAPPEL > DATEDEBUT AND HEUREAPPEL > HEURE DEBUT) AND (DATEAPPEL < DATEFIN AND HEUREAPPEL > HEUREFIN))
Ca ne marche pas : tu as les même résultats qu'avant ou pas les résultats attendus ?
Tes champs DATEAPPEL et HEUREAPPEL sont déclarés comment ?
Ont-ils le même format que DATEDEBUT HEUREDEBUT DATEFIN HEUREFIN ?
Tes champs DATEAPPEL et HEUREAPPEL sont déclarés comment ?
Ont-ils le même format que DATEDEBUT HEUREDEBUT DATEFIN HEUREFIN ?
J'ai les mêmes resultats qu'avant.
Mes champs DATEAPPEL et HEUREAPPEL (dans ma table TOUT) sont de type date et je les redeclare une deuxieme fois au cas ou.
Private Sub AJOUT_Click()
Dim DATEDEBUT As Date
Dim DATEFIN As Date
Dim HEUREDEBUT As Date
Dim HEUREFIN As Date
Set db = CurrentDb()
DATEDEBUT = Me.DATEDEBUT.Value
DATEFIN = Me.DATEFIN.Value
HEUREDEBUT = Left(Me.HEUREDEBUT.Value, 5)
HEUREFIN = Left(Me.HEUREFIN.Value, 5)
DoCmd.SetWarnings False
'REQUETE tri DATE ET CA+CNA
req1 = "SELECT TOUT.MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT )"
req1 = req1 + " AND ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
Mes champs DATEAPPEL et HEUREAPPEL (dans ma table TOUT) sont de type date et je les redeclare une deuxieme fois au cas ou.
Private Sub AJOUT_Click()
Dim DATEDEBUT As Date
Dim DATEFIN As Date
Dim HEUREDEBUT As Date
Dim HEUREFIN As Date
Set db = CurrentDb()
DATEDEBUT = Me.DATEDEBUT.Value
DATEFIN = Me.DATEFIN.Value
HEUREDEBUT = Left(Me.HEUREDEBUT.Value, 5)
HEUREFIN = Left(Me.HEUREFIN.Value, 5)
DoCmd.SetWarnings False
'REQUETE tri DATE ET CA+CNA
req1 = "SELECT TOUT.MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT )"
req1 = req1 + " AND ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
Je ne sais pas ce que peut donner un champ date auquel tu gardes les 5 premiers caractères...
Comment fais-tu pour les déclarer une deuxième fois en date ?
Peut-être que tu devrais changer le format d'affichage des champs HEURE dans la description de la table pour que les tests soient faits sur des données "identiques"...
Comment fais-tu pour les déclarer une deuxième fois en date ?
Peut-être que tu devrais changer le format d'affichage des champs HEURE dans la description de la table pour que les tests soient faits sur des données "identiques"...
On saisi dans un formulaire les heures de debut et fin mais quand je recupere ma valeur ca me donne 09:00:00 en fait ca compte les secondes, c'est pour ca que je prend que les 5 premiers chiffres.
Et dans ma table le champ heureappel est defini en date (car sur access on peur choisir que le format date/heure) et il est note ainsi 09:00.
quand j'execute ma requete je peux donc avoir les mêmes données a comparer 09:00 >=09:00 et non 09:00 >= 09:00:00
La requete fonctionne mais ca me prend par ex que les fiches du 04/09 de 09:00 à 12:00 et du 05/09 de 09:00 a 12:00 au lieu du 04/09 09:00 au 05/09 12:00.
A l'aide svp...
extrait code
Dim HEUREDEBUT As Date
Dim HEUREFIN As Date
Set db = CurrentDb()
DATEDEBUT = Me.DATEDEBUT.Value
DATEFIN = Me.DATEFIN.Value
HEUREDEBUT = Left(Me.HEUREDEBUT.Value, 5)
HEUREFIN = Left(Me.HEUREFIN.Value, 5)
DoCmd.SetWarnings False
req1 = "SELECT TOUT.MARCHE, TOUT.TYPE_MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT )"
req1 = req1 + " AND ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
Et dans ma table le champ heureappel est defini en date (car sur access on peur choisir que le format date/heure) et il est note ainsi 09:00.
quand j'execute ma requete je peux donc avoir les mêmes données a comparer 09:00 >=09:00 et non 09:00 >= 09:00:00
La requete fonctionne mais ca me prend par ex que les fiches du 04/09 de 09:00 à 12:00 et du 05/09 de 09:00 a 12:00 au lieu du 04/09 09:00 au 05/09 12:00.
A l'aide svp...
extrait code
Dim HEUREDEBUT As Date
Dim HEUREFIN As Date
Set db = CurrentDb()
DATEDEBUT = Me.DATEDEBUT.Value
DATEFIN = Me.DATEFIN.Value
HEUREDEBUT = Left(Me.HEUREDEBUT.Value, 5)
HEUREFIN = Left(Me.HEUREFIN.Value, 5)
DoCmd.SetWarnings False
req1 = "SELECT TOUT.MARCHE, TOUT.TYPE_MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT )"
req1 = req1 + " AND ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"
Moi aussi je seche.
je me demande pas si c'est une histoire de OR
WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT ) OR ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))
Mais ca marche pas aussi
ce qu'il faudrait c'est
WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT ) BETWEEN ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))
le probleme c'est que le between est utilisable entre deux champs
je me demande pas si c'est une histoire de OR
WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT ) OR ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))
Mais ca marche pas aussi
ce qu'il faudrait c'est
WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT ) BETWEEN ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))
le probleme c'est que le between est utilisable entre deux champs
AS-TU UNE AUTRE SOLUTION ????
req1 = "SELECT TOUT.MARCHE, TOUT.CODEMARCHE, TOUT.TELEACT, TOUT.DATEAPPEL, TOUT.RESULTAT "
req1 = req1 + " INTO [STATS CC]FROM TOUT "
req1 = req1 + " WHERE ((((TOUT.DATEAPPEL)>=DATEDEBUT AND (TOUT.HEUREAPPEL)>=HEUREDEBUT )"
req1 = req1 + " AND ((TOUT.DATEAPPEL)<=DATEFIN AND(TOUT.HEUREAPPEL)<= HEUREFIN))"
req1 = req1 + " AND RESULTAT<>'RAPPEL' AND RESULTAT<>'NRP' AND RESULTAT<>'STOPC' "
req1 = req1 + " AND RESULTAT<>'STOPCA'AND RESULTAT<>'');"