Avatar billede madeindk Nybegynder
05. maj 2006 - 16:23 Der er 16 kommentarer og
1 løsning

Finde dato der er "større" og "mindre end" nuværende

Hej eksperter! Jeg har pt. denne string:

SQL = "SELECT * FROM agreement WHERE userId=" & session("id") & " AND agreeDate > " & FormatDateTime(Now, vbShortDate) & " "

Men den fungerer ikke efter hensigten - jeg vil gerne ha den skal vise de kommende aftaler man har i sin kalender og så tænkte jeg man kunne bruge > - men det virker ikke helt?
Avatar billede eagleeye Praktikant
05. maj 2006 - 16:36 #1
Hvilket dato format er din kolonne agreeDate ?

Er det en kolonne af typen datetime så kan du gøre i stil med dette:

SQL = "SELECT * FROM agreement WHERE userId=" & session("id") & " AND agreeDate > Now()"
Avatar billede madeindk Nybegynder
05. maj 2006 - 16:40 #2
agreeDate er bare et tekstfelt - men mine datoer bliver puttet ind som fx. 12-02-2006 - ligesom (FormatDateTime(Now, vbShortDate)) udskriver dem :-)
Avatar billede eagleeye Praktikant
05. maj 2006 - 16:52 #3
Er det ikke mySQL du bruger?
Den bruger dato formatet yyyy-mm-dd.

Så hvis det er en tekst kolonne og den skal sammenligner to datoer vil den ikke give det man forventer da den ikke sammenligner dem som datoer men som teskt.

"12-02-2006" < "22-01-2003"


Har du mulighed for at ændre det til DateTime kolonne, eller i det mindre ændre formatet til yyyy-mm-dd? I begge tilfælde skal der også ændre der hvor datoen gemmes til at gemme i formatet yyyy-mm-dd.
Avatar billede madeindk Nybegynder
05. maj 2006 - 16:53 #4
Det kan jeg sagtens gøre, men det ser bare ikke så pænt ud for jeg har fundet en kalender som popper up til brugeren og så vælger han en dato og ser det ikke pænt ud at når han putter input'et ind i en textbox og så skriver den 2006-01-03

Så bliver de da helt forvirret :D
Avatar billede eagleeye Praktikant
05. maj 2006 - 17:00 #5
hvis du bruger typen DateTime mener jeg at VB selv formatere datoen til dd-mm-yyyy når man udskriver, eller skal kan man skrive:

FormatDateTime(rs("agreeDate")






Alternativt er at beholde tekst men så lave SQL sætnignen så den formatere agreeDate til yyyy-mm-dd men det bliver på bekostning af hastighed:

SQL = "SELECT * FROM agreement WHERE userId=" & session("id") & " AND CONCAT(SUBSTRING(agreeDate,7,4), '-', SUBSTRING(agreeDate,4,2), '-', SUBSTRING(agreeDate,1,4)) > CURDATE()"
Avatar billede madeindk Nybegynder
05. maj 2006 - 17:03 #6
Synes du så jeg skal bruge dit alternativ eller skal jeg bruge FormatDateTime(rs("agreeDate") ?
Avatar billede madeindk Nybegynder
05. maj 2006 - 17:07 #7
Nu har testet den første metode, men den laver automatisk mit format fra 2006-05-03 om til 03-05-2006 - nitte
Avatar billede eagleeye Praktikant
05. maj 2006 - 17:10 #8
Jeg ville ikke bruge alternativet. Hvis man har en dato så bør den gemmes i en dato kolonne. I mySQL som Date eller DateTime hvis der skal tid med.

Date(10) giver formatet yyyy-mm-dd


Når du skal indsætte eller finde en dato via SQL kan du lave en funktion som denne:


function datoToSQL (s)
  datoToSQL = Year(s) & "-" & Right("0" & Month(s),2) & "-" & Right("0" & Day(s),2)
  if inStr(1, s, ":") > 0 then
    datoToSQL = datoToSQL & " " & Right("0" & Hour(s),2) & ":" & Right("0" & minute(s),2)
    datoToSQL = datoToSQL & ":" & Right("0" & Second(s),2)
  end if
end function


eks:
dato = "04-06-2006"
SQL = "SELECT * FROM tabelnavn WHERE datoKol = '" & datoToSQL(dato) & "'"
Avatar billede eagleeye Praktikant
05. maj 2006 - 17:10 #9
Nu har testet den første metode, men den laver automatisk mit format fra 2006-05-03 om til 03-05-2006
Ikke helt med på hvad du mener??
Avatar billede madeindk Nybegynder
05. maj 2006 - 17:12 #10
Ok - vidste ikke der kun var et felt der hed date, så er det nok derfor den skriver 2006-05-03 00:00:00 nu
Avatar billede madeindk Nybegynder
05. maj 2006 - 17:13 #11
Nu skriver den det korrekt i db (2006-05-03) men derfor sortere den jo stadig efter den danske dato (03-05-2006 fx.) i SQL stringen - og så vil det jo aldrig blive rigtigt.
Avatar billede eagleeye Praktikant
05. maj 2006 - 17:14 #12
hvordan ser din SQL sætning ud nu?
Avatar billede madeindk Nybegynder
05. maj 2006 - 17:16 #13
function datoToSQL (s)
  datoToSQL = Year(s) & "-" & Right("0" & Month(s),2) & "-" & Right("0" & Day(s),2)
  if inStr(1, s, ":") > 0 then
    datoToSQL = datoToSQL & " " & Right("0" & Hour(s),2) & ":" & Right("0" & minute(s),2)
    datoToSQL = datoToSQL & ":" & Right("0" & Second(s),2)
  end if
end function

SQL = "INSERT INTO agreement (topic, text, agreeDate, time, createDate, userId, type) " & "VALUES('" & request.form("topic") & "','" & request.form("text") & "','" & request.form("eventDate") & "','" & request.form("EventTime") & "','" & datoToSQL(dato) & "','" & session("id") & "','" & request.form("eventType") & "')"
objConn.Execute(SQL)
Avatar billede eagleeye Praktikant
05. maj 2006 - 17:18 #14
Ja det er den som indsætte i database. Jeg tænke mere på den det du skriver:

>>  men derfor sortere den jo stadig efter den danske dato (03-05-2006 fx.) i SQL stringen - og så vil det jo aldrig blive rigtigt.


Hvis du vil hente fra datasen af dem som er i fremtiden kan det srkies som:

SQL = "SELECT * FROM agreement WHERE userId=" & session("id") & " AND agreeDate > CURDATE()"
Avatar billede madeindk Nybegynder
05. maj 2006 - 17:20 #15
Så passer det sgu og mine datoer passer søreme også... Det forstår jeg bare ikke hvorfor de gør, men det finder jeg nok ud af :-)

Smider du et svar eagleeye?
Avatar billede eagleeye Praktikant
05. maj 2006 - 17:22 #16
Ok ;)

Eller hvis det ikke skal være fra idag ( CURDATE() ) men eksvis fra den 10 maj og frem, så bruger du funktionen datoToSQL til at formatere den:


dato = "10-05-2006"

SQL = "SELECT * FROM agreement WHERE userId=" & session("id") & " AND agreeDate > '" & datoToSQL(dato) &"'"
Avatar billede madeindk Nybegynder
05. maj 2006 - 17:22 #17
Jep - så langt er med... Tak for hjælpen ;-)
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