Slumpa ut 1000 datum

ASP

17 svar · 683 visningar · startad av Erik Juhlin

Medlem sedan maj 200010 687 inlägg
Trådstart#1

Programmeraren Hanns är inte här idag och de har satt mig på att göra ett statistik system. Hanns mailade mig lite tips.

Lägg upp en tabell med endast ett fält av typen datetime, skriv sedan ett program som skapar ett 1000-tal poster i denna tabell på slumpvisa dagar.

Någon som kan hjälpa mig?

Bra avslut på mailet också. :e

P.S. This message will self-destruct in T-5 seconds. Should you be captured by enemy forces, Incordia will deny all knowledge of you.

Medlem sedan juni 200032 967 inlägg
#2

vad vill du lite mer specifikt ha hjälp med?

sen vet jag inte om jag skulle lita helt och fullt på statistik som är framslumpad... ;)

Medlem sedan maj 200010 687 inlägg
#3

Hur man slumpar fram 1000 datum. Vill ha in olika datum under år 2001 i StatisticDate i tabellen tblStatistic.

Medlem sedan juni 200032 967 inlägg
#4

jag ska se om jag kan hitta någon liten kodsnutt i mina gömmor (eller i min hjärna), men jag hoppas att du inte tänkte dig 1000 olika datum under 2001? ;)

Medlem sedan maj 200010 687 inlägg
#5

Nej, det behöver inte vara under 2001. Fast det skulle kunna vara det. Är bara bra om vissa datum dyker upp flera gånger. :)

Medlem sedan juni 200032 967 inlägg
#6

ok, för det kan vara lite klurigt att få in tusen olika datum under ett år nämligen. :)

Medlem sedan maj 200010 687 inlägg
#7

Okej, men det ska i alla fall inte vara 1000 lika datum. :)

Medlem sedan juni 200032 967 inlägg
#8

här får du en liten kärra som plockar fram 1000 slumpiga datum under 2001.

insertarna till databasen fixar du själv väl?

for i = 1 to 1000
	
	randomize
	slump = Int((365 - 1 + 1) * Rnd + 1)
	slumpdatum = dateadd("d",slump,"2000-12-31")
	Response.Write i & " : " & slumpdatum & "<br>"

next

mvh,

Medlem sedan maj 200010 687 inlägg
#9

Borde inte det här funka?

rs.AddNew
For i = 1 to 1000

Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
rs("VisitDate") = slumpdatum
Next
rs.Update
rs.Close

rs("VisitDate") = Now funkade i alla fall.

Medlem sedan juni 200032 967 inlägg
#10

ggahh! :x

använd riktiga, sql-satser, dvs insert into för att stoppa till data.

For i = 1 to 1000
Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
strSQL = "insert into tblStatistic(StatisticDate) values ('" & slumpdatum & "')"
Conn.execute (strSQL)
Next

blanda inte in recordset i det här för då blir jag lessen i ögat! ;)

Medlem sedan maj 200010 687 inlägg
#11

Varför funkar det inte nu då? :(

<%
Set StatisticCon = Server.CreateObject("ADODB.Connection")
StatisticCon.Open "Provider=SQLOLEDB; Data Source=192.168.0.8; Initial Catalog=IABStatistic; User ID=sa;"

For i = 1 to 1000
Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
strSQL = "insert into tblStatistic(VisitDate) values ('" & slumpdatum & "')"
StatisticCon.execute (strSQL)
Next
%>

Microsoft OLE DB Provider for SQL Server error '80040e14'

Violation of PRIMARY KEY constraint 'PK_tblStatistic'. Cannot insert duplicate key in object 'tblStatistic'.

/erik/IABStatistic/Default.asp, line 10

Medlem sedan juni 200032 967 inlägg
#12

aha! du har satt datumkolumnen som primärnyckel, då kan du inte stoppa in värden (datum) som redan finns där. släng in en räknare (int, identity) i tabellen som primärnyckel istället, så kan du ha flera datum som är likadana.

du måste då tömma tabellen först, för du har ett gäng datum där nu...

Medlem sedan feb. 20001 590 inlägg
#13

Troligtvis är fältet indexerat, och kopior tillåts inte, mao. samma datum

Sen finns ju slumpfunktion i MSSQL, så du kan faktiskt skapa slumpdatumen direkt i sql satsen.

/T

Medlem sedan juni 200032 967 inlägg
#14

toonster, berätta gärna mer om slumpfuktionen i sql server!

Medlem sedan maj 200010 687 inlägg
#15

Schysst @nders!
Men går det att få samma datumformat som Now?

Medlem sedan juni 200032 967 inlägg
#16

jag tar mig friheten att citera LarsG från en nylig tråd i forumet SQL.

Formatet i databasen går inte att ändra på. Internt så lagras datum som ett numeriskt värde som anger antal sekunder från en viss tidpunkt.) Du får använda convert när du hämtar data i stället.

besvarade det din fråga?

mvh,

Medlem sedan maj 200010 687 inlägg
#17

Nej, jag förstår inte. Fick detta svaret av Hanns.

rs("VisitDate") = DateAdd("s", (31536000*RND) Mod 31536000 "2001-01-01")

Men det förstår jag inte riktigt heller. :l

Nu ser det ut så här:

<%
Set StatisticCon = Server.CreateObject("ADODB.Connection")
StatisticCon.Open "Provider=SQLOLEDB; Data Source=192.168.0.8; Initial Catalog=IABStatistic; User ID=sa;"

For i = 1 to 1000
Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
strSQL = "insert into tblStatistic(VisitDate) values ('" & slumpdatum & "')"
StatisticCon.execute(strSQL)
Next
Set StatisticCon = Nothing
%>

Och då lagras datumen i formatet 2001-04-26. Jag vill att de ska lagras i formatet 2001-04-26 11:58:51.

Medlem sedan dec. 200012 464 inlägg
#18

Då får du väl lägga till en slumpmässigt antal sekunder också.

For i = 1 to 1000
Randomize
slump = Int((365 - 1 + 1) * Rnd + 1)
slumpdatum = dateadd("d",slump,"2000-12-31")
slump = int(24*60*60*Rnd)
slumpdatum = dateadd("s",slump,slumpdatum)
strSQL = "insert into tblStatistic(VisitDate) values ('" & slumpdatum & "')"
StatisticCon.execute(strSQL)
Next

och sen när man plockar ut datum så använder man

FormatDateTime(rs("datum"),vbLongDate)
FormatDateTime(rs("datum"),vbLongTime)

t.ex. för att bestämma presentationsformatet. Det format man får bestäms av vilken locale inställning man har.

session.lcid = 1053

passar bra för att få svenskt utseende.

376 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
127 ms — deklarationer (db)
121 ms — hämta statistik (db)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)