webForumDet fria alternativet

datediff (?)

10 svar · 590 visningar · startad av Mika3l

Mika3lMedlem sedan nov. 20018 492 inlägg
#1

Vill visa poster från en databas som har ett datum som är lika med eller senare än dagens datum i en kolumn och tidigare datum i en annan kolumn. Hur gör man? Antar att man får använda sig med datediff() på något sätt? Det smidigaste (tror jag iaf) skulle vara om man kunde lösa det direkt i SQL-satsen (använder MySQL).

@ndersMedlem sedan juni 200032 969 inlägg
#2

Det smidigaste (tror jag iaf) skulle vara om man kunde lösa det direkt i SQL-satsen (använder MySQL).

Och varför ställer du då inte frågan i SQL-forumet? :)

Måste du använda DateDiff? Vad ligger lagrat i fälten?

Mika3lMedlem sedan nov. 20018 492 inlägg
#3

@nders skrev:

Och varför ställer du då inte frågan i SQL-forumet? :)

För att jag är osäker, men flytta gärna om det passar bättre där. :)

@nders skrev:

Måste du använda DateDiff? Vad ligger lagrat i fälten?

Vet inte riktigt, känns som att det borde räcka med ....WHERE f_date >= date() eller något men jag har inte riktigt fått det att fungera.

Databasen ser ut så här:
tblShows
f_SID | ID
f_date | datum (yyyy-mm-dd)
f_time | tid (xx:xx)
f_city | varchar
f_place | varchar

@ndersMedlem sedan juni 200032 969 inlägg
#4

Om du bara lagrar datum i datumfälten så borde det fungera med typ

where datum1 >= date() and datum2 < date()

(under förutsättning att det finns något som heter *date()*i mysql)

Mika3lMedlem sedan nov. 20018 492 inlägg
#5

Vart kommer datum2 in i bilden? :o

Jag testade med

Set rs = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM tblShows WHERE f_date >= " & date() & " ORDER BY f_date DESC"
rs.Open SQL, Connection

If rs.EOF Then
Response.Write("No<br /><br />")
End If
rs.Close : Set rs = Nothing

men det skriver inte ut "No" trots att det borde (finns för tillfället inget datum som är senare än dagens).
SQL-satsen när jag skriver ut den: SELECT * FROM tblShows WHERE f_date >= 2007-02-16 ORDER BY f_date DESC

@ndersMedlem sedan juni 200032 969 inlägg
#6

Antingen är det du som inte kan skriva eller jag som inte kan förstå. Så skit i datum2 om det är en missuppfattning. När jag läste följande:

lika med eller senare än dagens datum i en kolumn och tidigare datum i en annan kolumn

, så tolkade jag det som att du ville jämföra mot två datumfält.

SELECT * FROM tblShows WHERE f_date >= 2007-02-16 ORDER BY f_date DESC

Där står faktiskt:

SELECT * FROM tblShows WHERE f_date >= 1989 ORDER BY f_date DESC

Du skall ha apostrofer runt datumvärden, annars räknar databasmotorn ihop dvs 2007 minus 2 minus 16. Kan du inte använda date() direkt i SQL? Måste du konkatenera in det från ASP?

Mika3lMedlem sedan nov. 20018 492 inlägg
#7

Ok, men för att förtydliga. f_date är det enda som gäller, f_time är ointressant (om det var det du tänkte på). Jag skulle nog aldrig ha skrivit kolumn, menade rent presentationsmässigt då. :)

Apostroferna har jag ju glömt ja (märks att det var bra länge sen jag satt och pillade med sånt här)! Det löste problemet! Testade även med date() direkt men det gick inte så bra, fungerade med now() men det borde väl skriva ut tid också vilket känns onödigt..?
Jaja, tack för hjälpen iaf! :)

@ndersMedlem sedan juni 200032 969 inlägg
#8

Jag använder inte mysql, så jag vet inte hur man får fram dagens datum direkt i sql, men skulle gissa på att current_date() fjunkar. Det är onödigt att konkatenera om man inte måste, och dessutom är det inte säkert att databasservern och webbservern har samma tid på klockan...

Mika3lMedlem sedan nov. 20018 492 inlägg
#9

current_date() fungerar perfekt! Tack igen! :)

@ndersMedlem sedan juni 200032 969 inlägg
#10

Vasse! :bire

LarsGMedlem sedan dec. 200012 464 inlägg
#11

Flyttas från ASP.

current_date() är en mysqlspecifik funktion, använd current_date i stället.

125 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)