Avatar billede neocron Nybegynder
26. august 2007 - 16:41 Der er 14 kommentarer og
1 løsning

MySQL udtræk fra dato x til dato y

Hejsa Eksperter,
Jeg har et spørgsmål vedr. MySQL og udtræk med datoer.

Det skal forståes på den måde at jeg har et given dato range. F.eks:

Felt 1: 10-08-2007
Felt 2: 20-08-2007

Jeg vil derfor gerne have SELECT'et alle som ligger mellem denne dato-range - altså fra og med 10-08-2007 til og med 20-08-2007. Jeg er ikke helt sikker på hvordan man skal gøre dette, for det er jo ikke helt det samme som et simpelt heltal.

SELECT * FROM minTabel WHERE alder BETWEEN 20 AND 30

Sådan kunne man jo gøre det med heltal.. Men hvordan omskriver jeg ovenstående SQL sætning til at gøre det med en streng?

Jeg håber I kan hjælpe!
Avatar billede arne_v Ekspert
26. august 2007 - 16:51 #1
Hvis dit felt er af typen DATETIME, så er det lige så simpelt som for heltal.

Hvis dit felt er af typen VARCHAR, så har du et problem.
Avatar billede neocron Nybegynder
26. august 2007 - 17:42 #2
I øjeblikket er det VARCHAR, men det er jeg villig til at ændre til DATETIME hvis det kan løse problemet enkelt.

Kunne jeg evt. lokke dig til at lave et SQL eksempel hvor vi antager at jeg har en DATETIME og et datoformat der skal være dd-mm-yyyy? Jeg har nemlig ikke stiftet megen bekendtskab med DATETIME.
Avatar billede erikjacobsen Ekspert
26. august 2007 - 17:45 #3
Eksempel på konvertering fra dit varchar-felt til datetime - check selv om felterne passer.
Avatar billede erikjacobsen Ekspert
26. august 2007 - 17:45 #4
Avatar billede arne_v Ekspert
26. august 2007 - 17:59 #5
Jeg vil stærkt anbefale DATETIME (eller DATE hvis du ikke skal bruge klokken).
Avatar billede liit42 Nybegynder
26. august 2007 - 18:06 #6
DATE bruger YYYY-MM-DD - håber det stadig er noget du kan bruge.. Erik har allerede give t en guide til at lave din varchar om - så her er et par eksempler på hvor nemt det er med DATE

mysql> SELECT * FROM datotest;
+------------+
| dato      |
+------------+
| 1764-12-24 |
| 2007-08-10 |
| 2007-08-15 |
| 2007-08-20 |
+------------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM datotest WHERE dato BETWEEN '2007-08-10' AND '2007-09-01';
+------------+
| dato      |
+------------+
| 2007-08-10 |
| 2007-08-15 |
| 2007-08-20 |
+------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM datotest WHERE dato BETWEEN '2007-08-11' AND '2007-08-20';
+------------+
| dato      |
+------------+
| 2007-08-15 |
| 2007-08-20 |
+------------+
2 rows in set (0.00 sec)

mysql>
Avatar billede neocron Nybegynder
26. august 2007 - 18:34 #7
Jeg tror det er DATE vi skal gå efter. Desværre skal det være være DD-MM-YYYY og ikke YYYY-MM-DD. Det er uheldigt - udover denne vil DATE være perfekt. VARCHAR er alt for bøvlet til at jeg vil bruge tid på den overhovedet. Er der nogen måde man relativt simpelt kan "snyde" sig udenom dette amerikaniserede datoformat og have dansk format?
Avatar billede arne_v Ekspert
26. august 2007 - 18:36 #8
Lad din applikation håndtere det. Hvilket sprog skal applikationen laves i ?
Avatar billede neocron Nybegynder
26. august 2007 - 18:38 #9
En mulighed er jo at snyde lidt i PHP og vise datoen på dansk, men ellers behandle den som den er.
Avatar billede neocron Nybegynder
26. august 2007 - 18:38 #10
(Det er PHP)
Avatar billede neocron Nybegynder
26. august 2007 - 18:40 #11
En mulighed, men jeg synes den er lidt grim?
Jeg ved ikke lige om der findes en funktion til at konvertere datoen. I det mindste fungerer denne her.

(test)
$dato = "26-08-2007";
$d = explode("-", $dato);
$dato2 = $d[2]."-".$d[1]."-".$d[0]; // 2007-08-26
Avatar billede erikjacobsen Ekspert
26. august 2007 - 19:54 #12
Det er udmærket til formålet. Det er uholdbart at blande formatet til præsentation sammen med formatet til opbevaring af data.
Avatar billede neocron Nybegynder
29. august 2007 - 21:58 #13
Tak for hjælpen og forslagene, alle sammen. Det virker smukt til formålet.
liit42, vil du smide et svar? Dine eksempler var med til lige at skære det ud i pap for mig.
Avatar billede neocron Nybegynder
13. september 2007 - 18:22 #14
liit42? :)
Avatar billede neocron Nybegynder
02. august 2008 - 13:43 #15
Jeg lukker denne. liit42, såfremt der fortsat ønskes point, så hiv da fat i mig.
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
Computerworld tilbyder specialiserede kurser i database-management

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