Avatar billede hundevennen Nybegynder
06. december 2010 - 13:45 Der er 8 kommentarer og
1 løsning

hjælp til sql sætning

Jeg har en aktivitetskalender i en MS SQLdatabase hvor jeg skal ha fat i nogle aktiviteter der har forskellig gyldighedsperiode.

F.eks har jeg 2 gyldighedsperioder 010410 - 010411 og 251110 - 281110.
og skulle gerne fange dem begge i en søgning, hvis jeg søger på alt der er gyldigt mellem 011010 - 011210
Tabellen indeholder bl.a felterne datofra og datotil
altså noget med

SELECT * FROM Tabel Where datofra < 011010 or datofra >= 011010 and datotil >= 011210  order by dato......... - men denne duer ikke
Avatar billede Syska Mester
06. december 2010 - 14:04 #1
Kan du oversætte hvad du mener med "duer ikke" ... tager den for meget data, for lidt data eller ?

Hvad er typerne af datotil, datafra, dato ?

For mig at se, så ligner alle dine type tal ( integers )

010210 ... er det 2 januar 2010 eller 1 februar ?

Dansk/US dato format skal godt spille en rolle her.

mvh
Avatar billede hundevennen Nybegynder
06. december 2010 - 14:10 #2
sætningen tager alt med - datotil datofra dato er datofiler, som i databasen/tabeller ser således ud 2010-11-01 altså åååå-mm-dd
Avatar billede Syska Mester
06. december 2010 - 14:24 #3
Jeg er ik' helt med ... synes der mangler lidt mere info.

sorry.
06. december 2010 - 15:43 #4
Jeg gaar ud fra at din foerste periode er fra 1 april 2010 til 1 april 2011 og din anden periode fra 25 november 2010 til 28 november 2010 og du vil fange alle perioder der er gyldige mellem 1 oktober 2010 og 1 december 2010.

Du skal saa soege efter perioder hvor datofra < 1 dec og datotil > 1 oct 2010.  Med datoer i yyyy-mm-dd format skulle denne query virke:

SELECT * FROM Tabel1 WHERE datofra < '2010-12-01' AND datotil > '2010-10-01'

Jeg lavede for test en tabel hundevennen med nedenstaaende vaerdier.  Af de fem perioder er de to foerste dine perioder, tredje og fjerde ligger henholdsvis for tidlig og for sent, men periode5 er gyldig mellem dine to skaeringsdatoer.  Med denne query:  SELECT * FROM hundevennen WHERE datofra < '2010-12-01' AND datotil > '2010-10-01'; faar jeg dette resultat:

navn  datofra  datotil 
      periode1 2010-04-01 2011-04-01
      periode2 2010-11-25 2010-11-28
      periode5 2010-07-07 2010-10-08
06. december 2010 - 15:44 #5
Jeg glemte at tilfoeje mine testdata.  Her er de:

CREATE TABLE hundevennen (navn VARCHAR(10), datofra DATE, datotil DATE);

INSERT INTO hundevennen VALUES('periode1', '2010-04-01', '2011-04-01');
INSERT INTO hundevennen VALUES('periode2', '2010-11-25', '2010-11-28');
INSERT INTO hundevennen VALUES('periode3', '2010-03-01', '2010-09-10');
INSERT INTO hundevennen VALUES('periode4', '2010-12-12', '2011-05-05');
INSERT INTO hundevennen VALUES('periode5', '2010-07-07', '2010-10-08');
Avatar billede hundevennen Nybegynder
06. december 2010 - 16:49 #6
Hej Christian_Belgien - du har fat i hvad jeg vil ha ud af min sqlsætning - men jeg kan desværre ikke teste på mine data nu da jeg ikke er på arbejde længere - i morgen tidlig tester jeg din sætning
Avatar billede hundevennen Nybegynder
07. december 2010 - 07:54 #7
Christian_Belgien
Jeg har nu testet det og det virker.
Jeg skal faktisk ha endnu et AND hægtet på sqlsætningen

så den kommer  til at se sådan ud:
SELECT * FROM Tabel1 WHERE datofra < '2010-12-01' AND datotil > '2010-10-01' and type = 'fyrværkeri' order by .........., men den virker ikke - den giver ihverfald ikke noget resultat.
Jeg har prøet med () omkring datoerne altså
SELECT * FROM Tabel1 WHERE (datofra < '2010-12-01' AND datotil > '2010-10-01') AND ..... men det virker ikke??
07. december 2010 - 17:40 #8
Var det et tillaegsspoergsmaal?  Altsaa du har forskellige typer af perioder og du vil finde hvilke perioder af en bestemt type der falder indenfor et bestemt tidsrum og yderligere have det presenteret i en bestemt orden?

Jeg tilfoejede en kolonne 'type' til tabellen 'hundevennen' saaledes:

ALTER TABLE hundevennen ADD type VARCHAR(10);

UPDATE hundevennen SET type = 'fyrvaerk' WHERE navn = 'periode1';
UPDATE hundevennen SET type = 'fyrvaerk' WHERE navn = 'periode2';
UPDATE hundevennen SET type = 'fyrvaerk' WHERE navn = 'periode3';
UPDATE hundevennen SET type = 'vaerkfyr' WHERE navn = 'periode4';
UPDATE hundevennen SET type = 'vaerkfyr' WHERE navn = 'periode5';

Saa giver denne query: 'SELECT * FROM hundevennen WHERE datofra < '2010-12-01' AND datotil > '2010-10-01' AND type = 'fyrvaerk' ORDER BY datofra;
'

dette resultat:

navn  datofra  datotil  type 
      periode1 2010-04-01 2011-04-01 fyrvaerk
      periode2 2010-11-25 2010-11-28 fyrvaerk
Avatar billede hundevennen Nybegynder
07. december 2010 - 18:05 #9
Christian

jeg har fået det til at virke - endnu engang tak for hjælpen
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