Avatar billede pfp Nybegynder
09. marts 2003 - 18:45 Der er 22 kommentarer og
2 løsninger

Select Between to datoer..

Hej,

Jeg har fx ti poster i en tabel. Hver post har en start og en slut dato.

Jeg vil nu gerne have valg alle de poster kriteriet er det at dags dato skal befinde sig mellem start og slut datoerne for hvert punkt.

Hvordan skal en sådan SQL se ud?

/pfp
Avatar billede hossein Nybegynder
09. marts 2003 - 19:25 #1
Hej igen, prøv den, men det er stadigvæk med msAccess:
<%@ Language=VBScript %>
<% session.LCID = 1030%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%
Set Conn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.recordset")
Conn.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="&server.Mappath("minDB.mdb"))
  SQL="SELECT * FROM tagwall where (startDatoDato < date()) and (slutDato> date())"
  rs.Open SQL, conn, 1, 3
%>
<% do while not rs.eof%>
<%= rs("startDato")%> <br>
<%= rs("slutDato")%>
<%
rs.MoveNext
loop
%>
Avatar billede hossein Nybegynder
09. marts 2003 - 19:25 #2
startDatoDato = startDato
Avatar billede hossein Nybegynder
09. marts 2003 - 20:58 #3
hjalp det?
Avatar billede pfp Nybegynder
09. marts 2003 - 23:43 #4
Nej jeg kan ikke lige få det til at virke.....
Avatar billede hossein Nybegynder
09. marts 2003 - 23:48 #5
ok for mig virker. Jeg har sat 3 datoer i tabellen og en af dem matcher og det blev hentet. Hvordan bruger man date i sql sætning i MySql?
Avatar billede hossein Nybegynder
09. marts 2003 - 23:49 #6
Er din server dansk eller US/Uk?
Avatar billede pfp Nybegynder
10. marts 2003 - 00:01 #7
Serveren er dansk men en klog en sagde en gang til mig at jeg skulle køre alle database-datoer i US format da det var det eneste der var til at regne med.

Jeg har selv forsøgt med dette:
SQL = "SELECT * FROM Tilbud WHERE " & dagsdato & " >= 'tilbud_start' AND " & dagsdato & " <= 'tilbud_slut'"

Og jeg kan ikke umiddelbart forstå hvorfor det ikke virker.
Avatar billede hossein Nybegynder
10. marts 2003 - 00:05 #8
selve feltet i din tabel hviken format den har, dato stå som 2003-03-10 også yyyy-mm-dd?
Avatar billede hossein Nybegynder
10. marts 2003 - 00:21 #9
Hvad er dagsdato? både start og slut ligger i et felt, som hedder dagsdato? hvis ja så skal du bruge between:
SQL = "SELECT * FROM Tilbud WHERE dagsdato between 'tilbud_start' AND 'tilbud_slut'"

Nu er jeg forvirret :)
Avatar billede pfp Nybegynder
10. marts 2003 - 06:37 #10
dagsdato er som navnet antyder den dato vi har idag. Det er med andre ord ikke en del af databasen og derfor troede jeg at jeg kunne klare den ved ikke at have den med direkte i SQL'en...

dagsdato = 2003-03-10

tilbud_start = 2003-03-07
tilbud_slut = 2003-04-20
Avatar billede hossein Nybegynder
10. marts 2003 - 20:50 #11
Ok, Jeg har desværre ikke mySQL men jeg tror det er en formaterings fejl. Så i msAccess dette virker:
SQL="SELECT * FROM tagwall where (startDato < date()) and (slutDato> date())"
Jeg vil forslår at du bare henter startDato og slutDato. Også sammenlign den med Date() (eller dagsdato) for at se om de har samme format.
Og brug ikke <% session.LCID = 1030 %> i første omgang. Også prøv dig frem en efter en. Også skal vi se hvad der sker.
Avatar billede pfp Nybegynder
10. marts 2003 - 21:14 #12
Hej igen,

Jeg har prøvet med koden lignende din, altså:
SQL = "SELECT * FROM Tilbud WHERE 'tilbud_start' <= " & dagsdato & " AND 'tilbud_slut' >= " & dagsdato

Jeg har f.eks. en post i databasen med følgende datoer:
tilbud_start = 2003-03-09
tilbud_slut = 2003-03-24

Derfor burde mit rs i mine øjne også indeholde 1 post. Men som du siger er det sikkert noget med formatet, jeg fatter bare ikke hvad.

Jeg anvender ikke Session.LCID = 1030...
Avatar billede hossein Nybegynder
10. marts 2003 - 21:19 #13
Hej
men prøv at hente bare tilbud_start og tilbud_slut, sådan mener jeg:
select tilbud_start, tilbud_slut from Tilbud
så kan vi se, hvordan de ser ud? hvis du ikke har gjort indtil nu.
Avatar billede pfp Nybegynder
10. marts 2003 - 22:22 #14
Hej,

Du har dælme ret!

Hvis jeg udskriver datoerne får jeg f.eks. 10-03-2003 selvom jeg kan se det står listet som 2003-10-03 inde i selve databasen...

Hvordan formaterer jeg det så om?

Du lavede jo en funktion til at konvertere datoformatet til mig den anden dag, men den kan jeg vel ikke anvende inde midt i SQL'en..
Avatar billede hossein Nybegynder
10. marts 2003 - 22:26 #15
jo, formatere Date til dd-mm-yyyy brug samme funktion som jeg gav dig, byt på dd mm yyyy i forskellige versioner, jeg håber det giver resultatet.
Avatar billede pfp Nybegynder
10. marts 2003 - 22:27 #16
nå ja selvfølgelig, det prøver jeg lige. Indtil videre tak!
Avatar billede pfp Nybegynder
10. marts 2003 - 22:39 #17
Selvom jeg nu har vendt dagsdato formatet om kan jeg ikke få det til at virke...det er som om det ikke er den rigtige måde at sammenligne datoerne på.

Min seneste forsøg var:
SQL = "SELECT * FROM Tilbud WHERE 'tilbud_start' < " & dagsdato & " AND 'tilbud_slut' > " & dagsdato

Hermed skulle sammenligningsgrundlaget gerne være det samme som det du har brugt i din Access kode...men det funker bare ikke..øv
Avatar billede hossein Nybegynder
10. marts 2003 - 23:07 #18
Jeg kiggede lidt rundt da jeg ved intet om mySQL, men fandt en side måske du kan brug:
For those who need to convert from (MM/DD/YYYY)
format to (YYYY/MM/DD the ansi standard used in
mysql) (it seems to have been rather rudely left
out) without using scripting languages to do so,
you can do this...

CONCAT( SUBSTRING_INDEX( MM-DD-YYYY-Date, '/', -
1) , '/', SUBSTRING_INDEX( MM-DD-YYYY-Date, '/',
1), '/', SUBSTRING_INDEX(SUBSTRING_INDEX(MM-DD-
YYYY-Date, '/',2), '/', -1))

Note, change the '/' to whatever deliminator you
are using in your date. This works well to
convert the date to the format that mysql will
understand and work properly with. To convert
from the ansi standard date format (YYYY/MM/DD)
back to (MM/DD/YYYY) use the DATE_FORMAT function.

http://www.mysql.com/doc/en/Cast_Functions.html
Avatar billede hossein Nybegynder
10. marts 2003 - 23:23 #19
det går frem ad det er en der siger:
> i have set the system format of date as DD/MM/YYYY. Is there any
> additional things to do ? pls. send me the solution.

svar: use date_format to return the date in any format you want.
og date_format er:
SELECT DATE_FORMAT(Now(),'%W %D %M %Y %H:%i')
Avatar billede hossein Nybegynder
10. marts 2003 - 23:42 #20
den er også god men i hans ex. date har datatypen integer!

http://www.get2dom.com/pages/web/asp_mysql.php
Avatar billede pfp Nybegynder
11. marts 2003 - 15:10 #21
Hej det ser ud som om det er noget af det rigtige du har fat i der, men jeg kan ikke få det implementeret så det virker rigtigt.

I den sidste kan jeg så godt lave datoer som integer og så stadigvæk sammenligne den med en Date()??

Er der ikke nogen der har arbejdet med mySQL og datoer før..?
Avatar billede hossein Nybegynder
11. marts 2003 - 20:38 #22
Hej, jeg er ked af det at jeg ikke kan hjælpe dig mere, da jeg ikke har kendskab til mySQL. Men du kan lukke dette spørgsmål også opret en ny spørgsmål også nævn at det er mySQL.

vh    hossein
Avatar billede hossein Nybegynder
11. marts 2003 - 20:53 #23
Jeg kan ikke lade vær. jeg søgte under mySQL kategori med: ASP Date. Nogle af svarene matcher dit spm.
http://www.eksperten.dk/spm/81605
Avatar billede pfp Nybegynder
11. marts 2003 - 21:53 #24
Hej Hossein,

Tak for hjælpen men jeg kan ikke lige se hvordan jeg får det implementeret i min problemstilling.

Jeg vil istedet følge dit råd og oprette spørgsmålet forfra og nævne i overskriften at det drejer sig om mySQL, Select og dato.

Men tak fordi du har brugt så mange kræfter på at finde en løsning.

/peter
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