Avatar billede hojgaard Nybegynder
06. juli 2011 - 22:26 Der er 7 kommentarer og
1 løsning

Hente records inden for en periode

Jeg har en lille udfordring i at hente records inden for en tidsperiode.
Lad os sige jeg vil hente alle records inden for f.eks. 30 dage, og at jeg har en tabel med følgende record:

'Hans Hansen', '2011-07-17 00:00:00', '2011-07-19 23:59:59'

Jeg vil f.eks. gerne hente alle records mellem den '2011-07-18' og '2011-08-18', hvor jeg samtidigt får ovenstående record med fordi den '2011-07-18' ligger mellem StartDate og EndDate - det gør den '2011-08-18' ikke.

Jeg vil gerne kunne noget alla dette statement:
SELECT * FROM Items
WHERE StartDate >= '2011-07-18 00:00:00' AND EndDate <= '2011-08-18 00:00:00';

Dette statement returnerer selvfølgelig ikke min record.

Håber det giver nogenlunde mening.
Avatar billede NielsErikP Mester
06. juli 2011 - 22:39 #1
Hej..
Lytter lige med ;-)
Avatar billede kjeldsted Novice
06. juli 2011 - 23:14 #2
Du har ikke mulighed for at gemme dato i en unixtimestamp? Ville gøre alting meget nemmere.
Avatar billede hojgaard Nybegynder
06. juli 2011 - 23:36 #3
Jo, det vil ikke være noget problem at gemme dato i en unixtimestamp. Jeg kan se funktionen UNIX_TIMESTAMP() vil kunne hjælpe.

Har aldrig brugt formatet før. Hvordan kan det hjælpe?
Avatar billede arne_v Ekspert
06. juli 2011 - 23:40 #4
SELECT * FROM Items
WHERE StartDate >= '2011-07-18 00:00:00' AND EndDate <= '2011-08-18 00:00:00';

returnerr alle raekker som ligger helt inden i soegeintervallet.

SELECT * FROM Items
WHERE (StartDate >= '2011-07-18 00:00:00' AND StartDate <= '2011-08-18 00:00:00')
OR (EndDate >= '2011-07-18 00:00:00' AND EndDate <= '2011-08-18 00:00:00')
OR
(StartDate < '2011-07-18 00:00:00' AND StartDate > '2011-08-18 00:00:00');

boer returnere dem som delvist er i intervallet.
Avatar billede arne_v Ekspert
06. juli 2011 - 23:41 #5
DATETIME eller TIMESTAMP maa vaere ret ligegyldigt her. Alle de sammenlignings operatorer virker fint med begge.
Avatar billede wanze Nybegynder
07. juli 2011 - 01:10 #6
@kjeldsted: Der er ingen grund til at benytte sig af en UNIX_TIMESTAMP i et INT-felt, som jeg går ud fra din løsning går ud på. MySQL har en masse værktøjer og metoder, der gør det nemt at håndtere datoer, når man bruger felttypen DATE, der er tilegnet formålet.

@hojgaard: MySQL har netop et keyword til formålet, nemlig BETWEEN.

Jeg har lavet et eksempel med en simpel tabel:


mysql> explain dates;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO  | PRI | NULL    | auto_increment |
| date  | date    | NO  |    | NULL    |                |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> select * from dates;
+----+------------+
| id | date      |
+----+------------+
|  1 | 2011-07-01 |
|  2 | 2011-07-11 |
|  3 | 2011-07-07 |
|  4 | 2011-07-05 |
|  5 | 2011-07-18 |
+----+------------+
5 rows in set (0.00 sec)

mysql> select * from dates where date between '2011-07-02' and '2011-07-13';
+----+------------+
| id | date      |
+----+------------+
|  2 | 2011-07-11 |
|  3 | 2011-07-07 |
|  4 | 2011-07-05 |
+----+------------+
3 rows in set (0.00 sec)
Avatar billede hojgaard Nybegynder
07. juli 2011 - 20:46 #7
Selvføgelig arne_v. Så simpelt kan det gøres!
Smid et svar :)
Avatar billede arne_v Ekspert
07. juli 2011 - 22:01 #8
svar
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