webForumDet fria alternativet

Mellan datum eller tomt?

ASP

20 svar · 508 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Frågan#1

Jag får inte detta att funka.
Så här skulle jag vilja ha´t:
Om dateFrom och dateTo är inom "rätt" intervall.
(dateFrom skall ha inträffat men dateTo skall inte ha inträffat.) och både dateFrom och dateTo kall kunna vara tomma eller null
(vet inte vad som returneras ifrån ett recset om man inte fyller den med ngt.)

null & null = OK
"1999-01-01" & "2008-01-01" = OK
null & "2008-01-01" = OK
"1999-01-01" & null = OK

null & "1999-01-01" = Inte OK
"2008-01-01" & "1999-01-01" = Inte OK
"2008-01-01" & null = Inte OK

If (datediff("s",dateFrom,now()) > 1 and datediff("s",dateTo,now()) < 1) or dateFrom ="" or dateTo="" then
'ett och 
else
'annat
end if
Medlem sedan dec. 20003 887 inlägg
#2

Jag vet inte om jag tolkat ditt halvkryptiska problem rätt men här är ett förslag

blnIntervalOk = True

If dateFrom = "" And DateDiff("d", Now(), dateTo) < 0 Then blnIntervalOk = False
If dateTo = "" And DateDiff("d", Now(), dateFrom) > 0 Then blnIntervalOk = False
If DateDiff("d", dateFrom, dateTo) > 0 Then blnIntervalOk = False

If blnIntervalOk Then
  [blue]'ett och[/blue]
Else
  [blue]'annat[/blue]
End If
Medlem sedan nov. 20017 144 inlägg
#3

Nepp. Testa detta.(som är inom intervallet för "now")

blnIntervalOk = True
dateFrom="2001-01-01" : dateTo="2005-01-01"

If dateFrom = "" And DateDiff("d", Now(), dateTo) < 0 Then blnIntervalOk = False
If dateTo = "" And DateDiff("d", Now(), dateFrom) > 0 Then blnIntervalOk = False
If DateDiff("d", dateFrom, dateTo) > 0 Then blnIntervalOk = False

If blnIntervalOk Then
Response.write "Ok, gäller!"
Else
Response.write "Gäller ej!"
End If
Medlem sedan dec. 20003 887 inlägg
#4

red.
Men... va?

Vilka kriterier har du egentligen?

Medlem sedan nov. 20017 144 inlägg
#5

samma fel

Medlem sedan nov. 20017 144 inlägg
#6

va, är det fel på dem?

Medlem sedan dec. 20003 887 inlägg
#7

Mja... det kan jag väl inte säga direkt, men för mig är dom för luddiga.

Vad är icke tillåtet?

If dateTo = "" And dateTo < Now Then IG
If dateFrom = "" And dateFrom > Now Then IG
If dateFrom > dateTo Then IG

Så uppfattade jag det.

Medlem sedan nov. 20017 144 inlägg
#8

Alltså.
Både dateFrom och dateTo skall kunna vara tomma.
Men, finns ett datum i något av dem, så måste det vara "rätt".
(dateFrom skall ha passerats men dateTo skall inte ha passerats.)

Medlem sedan maj 200010 687 inlägg
#9

Du har ingen möjlighet att göra det direkt med SQL?
Är lite enklare...

Medlem sedan maj 200010 687 inlägg
#10

Men det borde väl gå att skrvia så här:

n = Now
If IsNull(dateFrom) Then dateFrom = n
If IsNull(dateTo) Then dateTo = n

If dateFrom > n Or dateTo < n Then
	'Inte ok
Else
	'Ok
End If

Möjligt att du får skriva n = Date. Beroende på vad för datum som kommer ur DBn.

Medlem sedan nov. 20017 144 inlägg
#11

Erik Juhlin skrev:

Du har ingen möjlighet att göra det direkt med SQL?
Är lite enklare...

Iofs. men jag behöver alla poster ändå.

Medlem sedan nov. 20017 144 inlägg
#12

Jag vet! :i :)

Dim n,dateFrom,dateTo 
n = now()
dateFrom="" : dateTo=""

If Not IsDate(dateFrom) Then dateFrom = n
If Not IsDate(dateTo) Then dateTo = n

If DateDiff("n", n, dateFrom) > 0 Or DateDiff("n", n, dateTo) < 0 Then
	Response.write "Inte OK!"
Else
	Response.write "OK!"
End If
Medlem sedan maj 200010 687 inlägg
#13

Ungefär så jag skrev ju.

Smartare att använda Len istället för IsDate eftersom att längden ligger lagrat för strängar. Men jag förutsätter att det kommer null-värden får databasen när det inte finns något datum och då fungerar IsNull bra.

Medlem sedan nov. 20017 144 inlägg
#14

Ok, men jag fick aldrid din att funka.

Medlem sedan nov. 20017 144 inlägg
#15

Du har ingen möjlighet att göra det direkt med SQL?
Är lite enklare...

Hur skulle det se ut då då?

Medlem sedan maj 200010 687 inlägg
#16

Så här skriver man i SQL-Server. Tror man får använda NOW() istället för GETDATE() i Access.

SELECT * FROM tbl WHERE GETDATE() BETWEEN COALESCE(datefrom, GETDATE()) AND COALESCE(dateto, GETDATE())
Medlem sedan nov. 20017 144 inlägg
#17

Tack, det är mySql, det verkar som om även mySql har den funktionen också.
Men vad är igentligen skillnaden?

på:
now() BETWEEN sp_validdatefrom AND sp_validdateto
eller:
now() BETWEEN COALESCE(sp_validdatefrom, now()) AND COALESCE(sp_validdateto, now())

Resultatet blir ju det samma.
Denna post visas te.x. inte i något fall:
sp_validdatefrom = "1999-01-04"
sp_validdateto = ""

Medlem sedan maj 200010 687 inlägg
#18

Fältet måste vara i datumformat och det ska vara NULL om inte något datum är angett.

Medlem sedan nov. 20017 144 inlägg
#19

Ok, men går det att sätta fältet till null om fältformatet är datetime?

Medlem sedan maj 200010 687 inlägg
#20

Yes, går dock inte att sätta det till "" då...

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)