webForumDet fria alternativet

WHERE mid(pDate, 6, 2) ?

9 svar · 176 visningar · startad av Mz

MzMedlem sedan aug. 2001136 inlägg
#1

Hejsan!

Detta fungerar fint på min IIS men inte på Baloou, någon som kan hjälpa mig skapa en bättre SQL-fråga?

strToDay = mid(Date(), 6, 2)

	If strToDay < 10 Then
		strToDay = "0"& i
	Else
		strToDay = strToDay
	End if

SQL = "SELECT * FROM play WHERE mid(pDate, 6, 2) = "& strToDay &" ORDER BY pDate"
Set RecSet = Connect.Execute(SQL)

• i är en FOR-sats som räknar 1 to 3
• pDate är av datatypen kort Datum/Tid, ex 2002-01-20

------------------
~ Mz ~

LarsGMedlem sedan dec. 200012 465 inlägg
#2

Det hör nog ihop med olika datumformat.

SQL = "SELECT * FROM play WHERE day(pDate) = day(now()) ORDER BY pDate"
Set RecSet = Connect.Execute(SQL)

red: Förstår inte avsikten med for-loopen. Speciellt kontrollen om StrToDay < 10
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 20 jan 2002]

MzMedlem sedan aug. 2001136 inlägg
#3

Hej LarsG.

Det jag vill göra är att hämta alla poster i respektive månad.

Varje post har ett eget datum, ex. 2002-01-20, själva månaden plockar jag ut med mid(pDate, 6, 2), men kan jag inte använda det i SQL-satsen?

------------------
~ Mz ~

MzMedlem sedan aug. 2001136 inlägg
#4

Jag postar hela den snutten så kanske du förstår bättre vad det är jag försöker åstadkomma ;)

Response.Write "<table border=0 cellpadding=10><tr>"& vbcrlf

	strToDay = mid(Date(), 6, 2)
	For i = strToDay To 3

		If strToDay < 10 Then
			strToDay = "0"& i
		Else
			strToDay = strToDay
		End if

		SQL = "SELECT * FROM play WHERE mid(pDate, 6, 2) = "& strToDay &" ORDER BY pDate"
		Set RecSet = Connect.Execute(SQL)

			Dim rsDate
			rsDate = RecSet("pDate")
			Response.Write "<td valign=top><b>"& ShowManad(mid(rsDate, 6, 2)) &"</b><br>"& vbcrlf
			Response.Write SQL &"<br><br>"

			Do Until RecSet.EOF

				Dim rsDate2, rsPlace, rsCity
				rsDate2 = RecSet("pDate")
				rsPlace = RecSet("pPlace")
				rsCity = RecSet("pCity")
				If rsDate2 > Date() Then
					Response.Write rsDate2 &" "& rsPlace &" i "& rsCity &"<br><img src=images/trans.gif hight=5 width=5><br>"& vbcrlf
				Else
					Response.Write "<s>"& rsDate2 &" "& rsPlace &" i "& rsCity &"</s><br><img src=images/trans.gif hight=5 width=5><br>"& vbcrlf
				End If
			
			RecSet.MoveNext
			If RecSet.EOF Then Response.Write "</td>"
			Loop

	Next
			

Response.Write "</tr></table>"& vbcrlf

[Redigerat av Mz den 20 jan 2002]

LarsGMedlem sedan dec. 200012 465 inlägg
#5

Det finns en funktion som heter month som du skulle kunna använda. Den returnerar månaden i ett datum som ett nummer mellan 1 och 12.

Jag förstår ändå inte denna

For i = strToDay To 3

Vill du skriva ut för tre månader framåt? I så fungerar det enbart i januari. Du kommer aldrig in i loopen om månad > 3

------------------
essentitia preter non sans multiplicandum

MzMedlem sedan aug. 2001136 inlägg
#6

Hur ska jag använda month i min snutt här då?

Gällande For i = strToDay To 3 stämmer det nu när du säger det... :(
Men hur 17 hämtar jag då de denna månads poster samt de 2 nästkommande?

------------------
~ Mz ~

LarsGMedlem sedan dec. 200012 465 inlägg
#7

Varför behöver du loopa överhuvudtaget?

Du kan väl skriva sql-satsen som

sql = "select * from play where pDate between now() and dateadd('m',2,now())"

[Redigerat av LarsG den 20 jan 2002]

MzMedlem sedan aug. 2001136 inlägg
#8

Jag var inne på det också, men jag fattade inte hur jag skulle göra för att lägga varje månad i en ny kolumn.

Det fungerar bra med bägge modellerna iaf. :) , t.o.m min server-ätande-amatör-kod fungerade efter en stund... ;)

Om jag nu vill dela upp dem i 3 table-kolumner, hur görs det på ett smidigt sätt? Då måste man väl loopa, eller?

------------------
~ Mz ~

MzMedlem sedan aug. 2001136 inlägg
#9

Jag kör nu med:
FOR i = 0 To 2
strDate = DateAdd("m",i,Date())
SQL = "SELECT * FROM play WHERE datediff('m',pDate,#" & strDate & "#) = 0 ORDER BY pDate"

Fungerar bra, så det får ligga så. ;)
Tack för all hjälp!

------------------
~ Mz ~

LarsGMedlem sedan dec. 200012 465 inlägg
#10

Jo, det är kanske enklast att loopa. Annars så kan man titta på posterna och hålla reda på när det kommer en ny månad.

pmonth = 0
while not rs.eof 
if pMonth <> month(rs("pdate")) then
   'ny månad
   pmonth = month(rs("pdate")) 
end if
'...
wend

Jag kom på att den select jag skrev i förra inlägget inte fungerar så bra. Den tar bara poster från dagens datum och inte från den första i månaden.

sDate = cdate(year(now()) & "-" & month(now()) & "-01")
eDate = dateadd("d",-1,Dateadd("m",3,sDate))
sql = "select * from play where pDate between #" & sDate & "# and #" & eDate & "# order by pDate "

------------------
essentitia preter non sans multiplicandum

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb