Avatar billede bjarke-b Nybegynder
04. august 2004 - 19:08 Der er 10 kommentarer og
1 løsning

Dato søgning i mySQL

goddag goddag

jeg har en tabel, med nogle felter - de 2 der skal bruges er jobstart og jobslut - begge tinytext og indeholder en dato - formatet er 03-08-2004

SELECT * FROM job WHERE jobtype = 1 AND jobomraade LIKE '%%' AND jobstart <= '04-08-2004' AND jobslut >= '04-08-2004' ORDER BY jobstart;

denne SQL giver ingen resultater, til trods for at der er rekords hvor datoerne passer.
Avatar billede phineas_phreak Nybegynder
04. august 2004 - 23:22 #1
Du skal bruge engelske dato formater i SQL. Har selv kæmpet med det lort.

Et eksempel:
strdato = "06-02-1983"
data = Year(strdato) & "-" & Month(strdato) & "-" & Day(strdato)
strSQL = "SELECT * FROM tabelnavn WHERE Foedselsdato=#" & data & "#"
Avatar billede eagleeye Praktikant
05. august 2004 - 00:49 #2
Problmet med at havde kolonnen som tinytext er at den vil sammenligne det som tekst og ikke som en dato da kolonne typen afgør hvordan den sortere det. Eksempel vis vil den "02-09-2004" være mindre end "04-08-2004" fordi 2 kommer før 4 i karaktersetet. Tekst sammenligning forgår karakter for karakter og ikke hele stregen på en gang.

Så enten skal kolonnen være af typen date eller også skal der bygges noget ind i SQL sætningen som gør den tolker teksten som en "dato". Hvis man konvertere datoen til yyyy-mm-dd så gør det ikke noget det er tekst kolonner. mySQL bruger også yyyy-mm-dd som dato format.


SELECT * FROM job WHERE jobtype = 1 AND jobomraade LIKE '%%' AND CONCAT(SUBSTRING(jobstart,7,4),'-',SUBSTRING(jobstart,4,2),'-',SUBSTRING(jobstart,1,2)) <= '2004-08-04' AND CONCAT(SUBSTRING(jobslut,7,4),'-',SUBSTRING(jobslut,4,2),'-',SUBSTRING(jobslut,1,2)) >= '2004-08-04' ORDER BY jobstart


Du kan evt. tage et kig på mySQL's side:
http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html
http://dev.mysql.com/doc/mysql/en/String_functions.html
Avatar billede phineas_phreak Nybegynder
05. august 2004 - 01:30 #3
hov for satan, så sgu ikke lige at kolonnen var af typen tinytext
Avatar billede bjarke-b Nybegynder
11. august 2004 - 15:34 #4
eagleeye > jeg prøver lige med den sql sætning du gav og ser om det virker.
Avatar billede bjarke-b Nybegynder
11. august 2004 - 15:58 #5
sql = "SELECT * FROM job WHERE jobtype = " & strTypeId & " AND jobomraade LIKE '%" & strLandsdel & "%' AND CONCAT(SUBSTRING(jobstart,7,4),'-',SUBSTRING(jobstart,4,2),'-',SUBSTRING(jobstart,1,2)) <= '" & Date & "' AND CONCAT(SUBSTRING(jobslut,7,4),'-',SUBSTRING(jobslut,4,2),'-',SUBSTRING(jobslut,1,2)) >= '" & Date & "' ORDER BY jobstart"

Giver ingen post selv om der findes en med jobstart = 04-08-2004 og jobslut = 17-08-2004
Avatar billede eagleeye Praktikant
11. august 2004 - 16:02 #6
Prøv at bruge CURDATE() og ikke Date i SQL sætningen, eller skal man havde formatere Date som yyyy-mm-dd


sql = "SELECT * FROM job WHERE jobtype = " & strTypeId & " AND jobomraade LIKE '%" & strLandsdel & "%' AND CONCAT(SUBSTRING(jobstart,7,4),'-',SUBSTRING(jobstart,4,2),'-',SUBSTRING(jobstart,1,2)) <= CURDATE() AND CONCAT(SUBSTRING(jobslut,7,4),'-',SUBSTRING(jobslut,4,2),'-',SUBSTRING(jobslut,1,2)) >= CURDATE() ORDER BY jobstart"
Avatar billede bjarke-b Nybegynder
11. august 2004 - 16:05 #7
Så ser det ud til at virke, vil du komme med et svar?
Avatar billede eagleeye Praktikant
11. august 2004 - 16:06 #8
Ja det vil jeg da gerne :)
Avatar billede bjarke-b Nybegynder
24. september 2004 - 16:07 #9
eagleeyee - kan det passe at der bliver problemer når jobstart = 23-9-2004 og jobslut = 23-9-2005

Så vises ingen ting hos mig?
Avatar billede eagleeye Praktikant
29. september 2004 - 00:00 #10
Umiddelbart skulle det ikke ændre noget. Det enste jeg umiddelbart kan se er at der skal 0 i måned: 23-09-2004
Avatar billede bjarke-b Nybegynder
30. september 2004 - 08:41 #11
det ser ud til at virke, tak tak
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