Avatar billede eyes Nybegynder
04. november 2008 - 09:56 Der er 14 kommentarer og
1 løsning

Dato udtræk for poster som er ældre end 4 måneder

Hej Eksperter, sidder med et lille problem med et datoudtræk

Vil gerne have så de posts der er ældre end 4 måneder bliver vist

mit SQL ser således ud

'Dato
dim dagsdato
dagsdato = date()

'Udtræk fra DB
StrSQL = ""
StrSQL = "SELECT * FROM Vaerktoej WHERE efterset >= '"&dagsdato&"' ORDER BY efterset"
Set objRS = objConn.Execute(strSQL)

problemet ligger i at jeg ikke ved hvordan jeg får sat min variabel til at være 4 måneder fra nu.

fandt kun DateDiff og DateAdd da jeg søgte på funktioner?

Mit felt i databasen som hedder efterset er her at datoen lagres pt. Dette er en 16 varchar og lagres således 22.04.2008

i toppen af mit dokument har jeg følgende for at konvertere requests til dansk

Session.LCID = 1031

Håber i kan hjælpe
mvh simon
Avatar billede keysersoze Guru
04. november 2008 - 10:06 #1
så længe du gemmer en dato som tekst og ikke som dato vil du støde i problemer - havde du så bare gemt det som et bedre format (yyyy-mm-dd) var det trods alt lidt lettere.

Hvis du har mulighed for det så lav databasen om til at gemme en rigtig dato (altså i et datofelt) - det vil være den mest rigtige tilgang til løsning af problemet. Hvis ikke skal du konvertere tekst-strengen til en dato i din sql, hvordan afhænger af database-typen, i mssql kan du fx bruge CAST.
Avatar billede kalp Novice
04. november 2008 - 10:07 #2
dateadd(mm, 4, dinDato)
eller
dateadd(m, 4, dinDato)
eller
dateadd(month, 4, dinDato)


går du fra det er det du mener? hvis det er en access db skal din dato vidst ind i en CDate() først.
Avatar billede mitbrugernavn Praktikant
04. november 2008 - 10:14 #3
hvis du ikke ændre databasen om til datofelt så

db_dato = "22.02.2008"
dags_dato = date()
dato_4 = dateAdd("m",-4,dags_dato)
db_dato = replace(db_dato,".","-") 'hentet fra db - db_dato = replace(rs("db_dato"),".","-")
if cdate(ny_dato) > cdate(dato_4) then
response.write "ja"
else
response.write "nej"
end if
Avatar billede mitbrugernavn Praktikant
07. november 2008 - 13:47 #4
og hvordan gik det så ????
Avatar billede eyes Nybegynder
07. november 2008 - 15:41 #5
hej, i må undskylde jeg ikke har svaret endnu, det er fordi jeg ikke har haft tid til at se på det. fik dog det med dateAdd("m"-4, Date()) til at virke :) nu skal jeg bare have set på din replace og mit DB udtræk
Avatar billede mitbrugernavn Praktikant
07. november 2008 - 17:13 #6
db_dato = "22.02.2008"
dags_dato = date()
dato_4 = dateAdd("m",-4,dags_dato)
db_dato = replace(rs("db_dato"),".","-")
'det kan være du skal vende dag og måned om før du sammeligner
db_dato = month(db_dato) & "-" & day(db_dato)&"-"&year(db_dato)
if cdate(db_dato) > cdate(dato_4) then
response.write "ja"
else
response.write "nej"
end if
Avatar billede keysersoze Guru
07. november 2008 - 18:12 #7
det virker som en ret tung tilgang til tingene at hive alle data ud af databasen for at lave sammenligningen fremfor at dato-formattere stringen direkte i sql'en.
Avatar billede eyes Nybegynder
09. november 2008 - 19:53 #8
<%@LANGUAGE="VBSCRIPT"%>
<%Session.LCID = 1031%>

<%
dato = date()
db_dato = "09.11.2007"

response.Write(dato)
response.write("<br>")
response.Write(db_dato)
response.write("<br>")
response.write("<br>")
response.write(DateDiff("m",dato,db_dato))


response.write("<br>")
response.write("<br>")

if DateDiff("m",dato,db_dato) <= "-5" then

response.write("<br><br>ældre end 5 måneder<br><br>")

end if

%>

som i kan se her kan man godt få den til at vise resultatet i det danske datoformat
dag/måned/år
Avatar billede ikuyucu Nybegynder
11. november 2008 - 23:14 #9
Hej Eyes

Det kan sagtens lade sig gøre i ASP, meeeeen....
Som keysersoze skriver vil det være ineffektiv at køre filteret i ASP.
Du skal køre en hel masse records igennem unødigt. Du får problemer med at sortere, da du også skal lave det i ASP.

Hvis du har mulighed for det, så konverter dit felt om til datetime og lav dit filter i sql'en. Det sparer dig for en hel masse besvær og kører væsentlig hurtigere.
Avatar billede eyes Nybegynder
22. november 2008 - 11:40 #10
smid nogle svar så jeg kan give jer point
Avatar billede mitbrugernavn Praktikant
22. november 2008 - 12:14 #11
et svar ;-))) og et spørgsmål - hvordan løste du det så ?
Avatar billede eyes Nybegynder
22. november 2008 - 12:28 #12
jeg løste det med datediff

her er min test fil for at tjekke op på det.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>

<body>

<form action="ind.asp" method="post" enctype="application/x-www-form-urlencoded" name="form2">
  <input type="text" name="navn" id="navn" />
  <input type="submit" name="button" id="button" value="Indsæt" />
</form>


<%
dim navn
navn = request.Form("navn")
dato = date()
dato_4 = dateAdd("m",-4,date())
response.Write("Dato minus 4 måneder "&dato_4)
%>


<%
strSQL = ""
strSQL = "Select * from test"
db_dato = replace(db_dato,".","-") 'hentet fra db - db_dato = replace(rs("db_dato"),".","-")
Set rs = Conn.Execute(strSQL)
%>
<table width="423" border="1">
  <tr>
    <td width="52">ID</td>
    <td width="77">navn</td>
    <td width="272">dato</td>
  </tr>
<%
Do While Not rs.EOF

db_dato = rs("dato")

if DateDiff("m",dato,db_dato) <= "-5" then %>
  <tr>
    <td><%=rs("ID")%>&nbsp;</td>
    <td><%=rs("navn")%>&nbsp;</td>
    <td><%=rs("dato")%>&nbsp;</td>
  </tr>
<%end if%>
<%
rs.MoveNext
Loop
%></table><%

Conn.Close
Set Conn = Nothing
%>

</body>
</html>
Avatar billede mitbrugernavn Praktikant
22. november 2008 - 12:36 #13
super - ja man skal have styr på hvad man skal bruge sin database til inden man starter ;-))))
Avatar billede eyes Nybegynder
26. november 2008 - 17:04 #14
Hej mitbrugernavn

Jeg er stødt ind i et nyt prob. nu :\

hvordan laver jeg order by på min dato når det er et varchar felt jeg har ???

sådan her set det ud pt.

0516XXXX          28-03-2008
0517XXXX          28-03-2008
0518XXXX          28-03-2008
0502XXXX          28-03-2008
0907XXXX          24-04-2008
0908XXXX          24-04-2008
0911XXXX          24-04-2008
09120405          24-04-2008
0913XXXX          24-04-2008
1141XXXX          22-08-2007
06130208          22-04-2008
0906XXXX          21-04-2008
0101XXXX          02-04-2008
0102XXXX          02-04-2008
0901XXXX          02-04-2008

Har prøvet med ORDER BY DATO ASC og DESC men ingen glæde :\


mvh simon.

du får point :)
Avatar billede keysersoze Guru
26. november 2008 - 17:41 #15
som allerede foreslået til din udvælgelse vil en formattering af dine data direkte i sql-stringen kunne klare dette for dig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester