Fionction sql pour savoir si une date est comprise entre deux autre

mell01 Messages postés 72 Date d'inscription lundi 6 juin 2005 Statut Membre Dernière intervention 15 mai 2006 - 22 déc. 2005 à 13:32
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012 - 22 déc. 2005 à 19:47
bonjour,
existe - il une fonction SQL pour savoir si une date est comprise entre deux autres?
J'ai essayé BETWWEN mais apparemment il ne compare pas les dates et me renvoit ttes les valeurs...
merci d'avance

4 réponses

cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
22 déc. 2005 à 14:13
Ta base c'est de l' Access ou du SQL-serveur car la clause between fonctionne en Access je l'ai déjà utilisé avec des dates, il faut simplement tenir compte qu'Access utilise le format date de l'OS et si tu format tes dates différement dans VB il ne les reconnais pas.

Pascal Laurençon
0
Simouss33 Messages postés 85 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 15 février 2006 2
22 déc. 2005 à 14:34
Moi j'avais récupéré cette fonction sur le forum :


Function
MakeUSDate(ByVal dDate As Object)


If Not IsDate(dDate) Then Exit Function


MakeUSDate = "#" & Month(dDate) & "/" & Day(dDate) & "/" & Year(dDate) & "#"


End Function

Quand tu rentres une date, tu dois la convertir au bon format pour l'utiliser dans une requête SQL. Tu pourras alors utiliser le BETWEEN
0
scortex84 Messages postés 379 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 20 avril 2011 1
22 déc. 2005 à 16:00
Hello ! Je pense que les dates c infernal ! Surtout entre les différents types : JJ/MM/AA ou MM/JJ/AA etc etc
De mon coté, je stock les dates dans des champs textes, puis plutot que d'utiliser between ou autre trucs galere, je fais " where IN()"

Par exemple :
Select truc from machin where datee in('10/12/05','11/12/05',' etc...
Ca marche ! J'ai déjà testé sur plusieurs années, ça fonctionne sans probleme.
C'est un peu boiteu, mais ça marche dans 100% des cas.

Pour génerer le "IN", j'utilise une fonction qui reçoit 2 dates et renvoi la chaine.

Seb.
0
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
22 déc. 2005 à 19:47
Pas si mortel que ça les dates, il suffit en début de progamme de prendre le format de date utilisé par l'OS, puis de formater les champs dates avant de les enregister dans la base, il vas sans dire que le format du champ dans Access doit être de type date. Voici un exemple

A mettre dans un modul
'-------------------------------------------------------------------------
' lit une chaine de caractères
'-------------------------------------------------------------------------
Public Function mRegistry_QueryValueKeyString(Key As Long, SubKey As String, _
Name As String) As String


Dim lRetVal As Long
Dim hKey As Long
Dim sRetTxt As String
Dim lRetTxt As Long


If Trim(Right(SubKey, 1)) <> "" Then
SubKey = SubKey & ""
End If
lRetVal = RegOpenKeyEx(Key, SubKey, 0&, KEY_READ, hKey)
sRetTxt = String(4096, 32)
lRetTxt = Len(sRetTxt)
lRetVal = RegQueryValueExString(hKey, Name, 0&, REG_SZ, sRetTxt, lRetTxt)
lRetVal = RegCloseKey(hKey)
mRegistry_QueryValueKeyString = Trim(Left(sRetTxt, lRetTxt - 1))

End Function

A mettre quelque part lors de l'initialisation du programme

Private Sub MDIForm_Initialize()

Dim Date_Format as string
Dim Date_Mask as string

Date_Format = mRegistry_QueryValueKeyString(&H80000001, "Control Panel\International", "sShortDate")

If Len(Date_Format) < 10 Then
Date_Mask = "##/##/##"
Else
Date_Mask = "##/##/####"
End If


End Sub

Pascal Laurençon
0
Rejoignez-nous