Date comprise intervalle prédéfini ACCESS
matthias.laprun
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
titou -
titou -
Bonjour,
j'ai deux tables: OBSERVATION et T_ESPECE, liées par le champ ESPECE
dans OBSERVATION, 2 champs: DATE et ESPECE
dans T_ESPECE, 3 champs: ESPECE, DATE_DEBUT, DATE_FIN
j'aimerai dans une requête créer un champ où s'affiche "1" si DATE est compris entre DATE_DEBUT et DATE_FIN et "0" dans le cas contraire.
pour l'instant mes champs DATE, DATE_DEBUT et DATE_FIN sont au format jj/mm/aaaa, mais il faudrait que cette requête ne prenne pas en compte l'année.
merci de votre aide
matthias
j'ai deux tables: OBSERVATION et T_ESPECE, liées par le champ ESPECE
dans OBSERVATION, 2 champs: DATE et ESPECE
dans T_ESPECE, 3 champs: ESPECE, DATE_DEBUT, DATE_FIN
j'aimerai dans une requête créer un champ où s'affiche "1" si DATE est compris entre DATE_DEBUT et DATE_FIN et "0" dans le cas contraire.
pour l'instant mes champs DATE, DATE_DEBUT et DATE_FIN sont au format jj/mm/aaaa, mais il faudrait que cette requête ne prenne pas en compte l'année.
merci de votre aide
matthias
A voir également:
- Access requête date comprise entre
- Nombre de jours entre deux dates excel - Guide
- Whatsapp date incorrecte ✓ - Forum Mobile
- Acer quick access - Forum Logiciels
- Quick Access service ✓ - Forum PC portable
- Publipostage date inversée ✓ - Forum Word
4 réponses
Bonjour,
Une fonction en VBA peut-être ?
NB: ne tient pas compte de l'année, mais ça me semble bizard, si entre décembre et janvier ?
Renvoi 0
A+
Une fonction en VBA peut-être ?
'exemple d'appel
'e=TestDate(Date,Date_Debut,Date_Fin)
'Retourne 1 si compris et 0 si pas.
'
Function TestDate(DT As Date, DD As Date, DF As Date) As Integer
Dim D1 As Long, D2 As Long, D3 As Long
D1 = DateSerial(2000, Month(DT), Day(DT))
D2 = DateSerial(2000, Month(DD), Day(DD))
D3 = DateSerial(2000, Month(DF), Day(DF))
If D1 >= D2 And D1 <= D3 Then
TestDate = 1
End If
End Function
NB: ne tient pas compte de l'année, mais ça me semble bizard, si entre décembre et janvier ?
Renvoi 0
A+
Slt,
"j'aimerai dans une requête créer un champ où s'affiche "1" si DATE est compris entre DATE_DEBUT et DATE_FIN et "0" dans le cas contraire. "
-->
SELECT "1"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.DATE >= T_ESPECE.DATE_DEBUT
AND OBSERVATION.DATE <= T_ESPECE.DATE_FIN
UNION
SELECT "0"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.DATE < T_ESPECE.DATE_DEBUT
OR OBSERVATION.DATE > T_ESPECE.DATE_FIN
"pour l'instant mes champs DATE, DATE_DEBUT et DATE_FIN sont au format jj/mm/aaaa, mais il faudrait que cette requête ne prenne pas en compte l'année."
-->
Là je vois pas autrement que détruire tes colonnes au format DATE pour les deux tables, créer ensuite une première colonne qui stocke l'année et stocker le doublon "JJ/MM" dans une seconde colonne sous une autre forme pour comparer car ce sera plus au format DATE.
Donc - Pour les deux tables :
- Créer une colonne NBJOURS qui stocke "JJ/MM" sous la forme d'un INTEGER stockant le nombre de jour depuis le début de l'année (exemple : 02/03 --> tu pré-calcule le nombre de jours entre le 01/01 et le 02/03et tu stocke ce résultat dans cette nouvelle colonne - ne pas oublier de tenir compte des années bisextiles !!).
- Stocker l'année sous un format INTEGER dans une colonne supplémentaire : colonne ANNEE - qui servira pas ici si je t'ai compris.
Ensuite tu t'inspires de la requête plus haut et tu compares OBSERVATION.NBJOURS et T_ESPECE.NBJOURS.
SELECT "1"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.NBJOURS >= T_ESPECE.NBJOURS
AND OBSERVATION.NBJOURS <= T_ESPECE.NBJOURS
UNION
SELECT "0"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.DATE < T_ESPECE.NBJOURS
OR OBSERVATION.DATE > T_ESPECE.NBJOURS
J'vois po autrement.
Tu me tiens au courant ?.
Titou.
"j'aimerai dans une requête créer un champ où s'affiche "1" si DATE est compris entre DATE_DEBUT et DATE_FIN et "0" dans le cas contraire. "
-->
SELECT "1"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.DATE >= T_ESPECE.DATE_DEBUT
AND OBSERVATION.DATE <= T_ESPECE.DATE_FIN
UNION
SELECT "0"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.DATE < T_ESPECE.DATE_DEBUT
OR OBSERVATION.DATE > T_ESPECE.DATE_FIN
"pour l'instant mes champs DATE, DATE_DEBUT et DATE_FIN sont au format jj/mm/aaaa, mais il faudrait que cette requête ne prenne pas en compte l'année."
-->
Là je vois pas autrement que détruire tes colonnes au format DATE pour les deux tables, créer ensuite une première colonne qui stocke l'année et stocker le doublon "JJ/MM" dans une seconde colonne sous une autre forme pour comparer car ce sera plus au format DATE.
Donc - Pour les deux tables :
- Créer une colonne NBJOURS qui stocke "JJ/MM" sous la forme d'un INTEGER stockant le nombre de jour depuis le début de l'année (exemple : 02/03 --> tu pré-calcule le nombre de jours entre le 01/01 et le 02/03et tu stocke ce résultat dans cette nouvelle colonne - ne pas oublier de tenir compte des années bisextiles !!).
- Stocker l'année sous un format INTEGER dans une colonne supplémentaire : colonne ANNEE - qui servira pas ici si je t'ai compris.
Ensuite tu t'inspires de la requête plus haut et tu compares OBSERVATION.NBJOURS et T_ESPECE.NBJOURS.
SELECT "1"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.NBJOURS >= T_ESPECE.NBJOURS
AND OBSERVATION.NBJOURS <= T_ESPECE.NBJOURS
UNION
SELECT "0"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.DATE < T_ESPECE.NBJOURS
OR OBSERVATION.DATE > T_ESPECE.NBJOURS
J'vois po autrement.
Tu me tiens au courant ?.
Titou.
Re,
J'avais oublié : redefinir aussi les Primary Keys pour la table OBSERVATION :
- PK1 : ANNEE.
- PK2 : NBJOURS.
A+.
Titou.
J'avais oublié : redefinir aussi les Primary Keys pour la table OBSERVATION :
- PK1 : ANNEE.
- PK2 : NBJOURS.
A+.
Titou.
Re,
J'ai commis des erreurs et imprécisions.
Voici ma solution avec les corrections.
Pour la table OBSERVATION :
- Créer une colonne NBJOURS qui stocke "JJ/MM" sous la forme d'un INTEGER stockant le nombre de jours depuis le début de l'année (exemple : 02/03 --> tu pré-calcules le nombre de jours entre le 01/01 et le 02/03 et tu stockes ce résultat dans cette nouvelle colonne - ne pas oublier de tenir compte des années bissextiles !!).
- Stocker l'année sous un format INTEGER dans une colonne supplémentaire : colonne ANNEE - qui servira pas ici si je t'ai compris.
- Alimentation des colonnes ANNEE et NBJOURS à partir de l'ancienne colonne DATE via une moulinette.
- Enlever l'attribut PK sur la colonne DATE.
- Destruction de la colonne DATE.
- Définition des nouvelles PK1 et PK2 sur ANNE et NBJOURS.
Pour la table T_ESPECE - par analogie avec la table précédente :
- Créer une colonne NBJOURS_DEBUT (INTEGER) stockant le nombre de jours depuis le début de l'année.
- Créer une colonne ANNEE_DEBUT (INTEGER) stockant l'année.
- Créer une colonne NBJOURS_FIN (INTEGER) stockant le nombre de jours depuis le début de l'année.
- Créer une colonne ANNEE_FIN (INTEGER) stockant l'année.
- Alimentation des colonnes ANNEE_DEBUT et NBJOURS_DEBUT à partir de l'ancienne colonne DATE_DEBUT via une moulinette.
- Alimentation des colonnes ANNEE_FIN et NBJOURS_FIN à partir de l'ancienne colonne DATE_FIN via une moulinette.
- Destruction des colonnes DATE_DEBUT et DATE_FIN.
-->
SELECT "1"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.NBJOURS >= T_ESPECE.NBJOURS_DEBUT
AND OBSERVATION.NBJOURS <= T_ESPECE.NBJOURS_FIN
UNION
SELECT "0"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.NBJOURS < T_ESPECE.NBJOURS_DEBUT
OR OBSERVATION.NBJOURS > T_ESPECE.NBJOURS_FIN
Là je pense qu'il n'y a plus d'erreurs - à tester.
Titou.
J'ai commis des erreurs et imprécisions.
Voici ma solution avec les corrections.
Pour la table OBSERVATION :
- Créer une colonne NBJOURS qui stocke "JJ/MM" sous la forme d'un INTEGER stockant le nombre de jours depuis le début de l'année (exemple : 02/03 --> tu pré-calcules le nombre de jours entre le 01/01 et le 02/03 et tu stockes ce résultat dans cette nouvelle colonne - ne pas oublier de tenir compte des années bissextiles !!).
- Stocker l'année sous un format INTEGER dans une colonne supplémentaire : colonne ANNEE - qui servira pas ici si je t'ai compris.
- Alimentation des colonnes ANNEE et NBJOURS à partir de l'ancienne colonne DATE via une moulinette.
- Enlever l'attribut PK sur la colonne DATE.
- Destruction de la colonne DATE.
- Définition des nouvelles PK1 et PK2 sur ANNE et NBJOURS.
Pour la table T_ESPECE - par analogie avec la table précédente :
- Créer une colonne NBJOURS_DEBUT (INTEGER) stockant le nombre de jours depuis le début de l'année.
- Créer une colonne ANNEE_DEBUT (INTEGER) stockant l'année.
- Créer une colonne NBJOURS_FIN (INTEGER) stockant le nombre de jours depuis le début de l'année.
- Créer une colonne ANNEE_FIN (INTEGER) stockant l'année.
- Alimentation des colonnes ANNEE_DEBUT et NBJOURS_DEBUT à partir de l'ancienne colonne DATE_DEBUT via une moulinette.
- Alimentation des colonnes ANNEE_FIN et NBJOURS_FIN à partir de l'ancienne colonne DATE_FIN via une moulinette.
- Destruction des colonnes DATE_DEBUT et DATE_FIN.
-->
SELECT "1"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.NBJOURS >= T_ESPECE.NBJOURS_DEBUT
AND OBSERVATION.NBJOURS <= T_ESPECE.NBJOURS_FIN
UNION
SELECT "0"
FROM OBSERVATION, T_ESPECE
WHERE OBSERVATION.ESPECE = T_ESPECE.ESPECE
AND OBSERVATION.NBJOURS < T_ESPECE.NBJOURS_DEBUT
OR OBSERVATION.NBJOURS > T_ESPECE.NBJOURS_FIN
Là je pense qu'il n'y a plus d'erreurs - à tester.
Titou.