Avatar billede c-sharp Nybegynder
02. marts 2004 - 11:54 Der er 12 kommentarer og
1 løsning

Sammenligne perioder

Jeg har en side i forbindelse med et lille CMS system som skal kunne vise ud fra en angivet periode (eks. 1-1-2004 til 1-2-2004), der kan være flere forskellige versioner af denne side, dvs. en der skal  vises fra den 1-1-2004 til 1-2-2004 og en der skal vise fra den 2-2-2004 - 1-3-2004 osv.

Men hvordan kan jeg kontroller at der ikke er nogle af perioderne der overlapper hinanden?
Avatar billede venne Nybegynder
02. marts 2004 - 13:00 #1
Hvad er det for data? Er det datoer i en tabel?
Avatar billede c-sharp Nybegynder
02. marts 2004 - 13:02 #2
Ja det er datoer.
Avatar billede venne Nybegynder
02. marts 2004 - 13:09 #3
Det er ikke testet, men du kan måske bruge noget i denne retning til at finde perioder med overlap:

select *
from tabel t1
where exists (
    select *
    from tabel t2
    where t1.fradato <= t2.tildato
      and t1.tildato >= t2.fradato
)
Avatar billede c-sharp Nybegynder
02. marts 2004 - 13:41 #4
Det kan jeg ikke få til at virke, jeg har skrevet følgende:

SELECT    *
FROM        tblSider t1
WHERE    EXISTS
                          (SELECT    *
                            FROM          tblSider t2
                            WHERE      t1.datoFra <= t2.datoTil AND t1.datoTil >= t2.datoFra)

Og får alle posterne der er i tabellen når jeg køre sql-sætningen.
Avatar billede venne Nybegynder
02. marts 2004 - 13:47 #5
Der skal nok flere kriterier med i betragtning. Hvordan er tabelstrukturen?
Avatar billede c-sharp Nybegynder
02. marts 2004 - 13:54 #6
Jeg har følgende i min tabel

datoFra
datTil
sideNavn
Avatar billede venne Nybegynder
02. marts 2004 - 14:33 #7
Nåååja, dumme mig, der mangler jo noget:

SELECT *
FROM tblSider t1
WHERE EXISTS
  (SELECT *
  FROM  tblSider t2
  WHERE t1.datoFra <= t2.datoTil AND t1.datoTil >= t2.datoFra AND t1.sideNavn <> t2.sideNavn)
Avatar billede c-sharp Nybegynder
02. marts 2004 - 14:54 #8
Det kør ikke rigtig for mig.

Jeg har prøvet følgende:

SELECT    *
FROM        tblSider
WHERE    (01 - 03 - 2004 <= datoTil) AND (02 - 03 - 2004 >= datoFra)

Jeg har en post med følgende data:

Navn:    test
datoFra: 01-03-2004
datoTil: 05-04-2004

Men får ingen poster retur
Avatar billede venne Nybegynder
02. marts 2004 - 15:00 #9
Hvad vil du have ud af den forespørgsel?
Hvilken betydning har 01-03-2004 og 02-03-2004? Ønsker du de sider, der er gældende i den periode?
Avatar billede c-sharp Nybegynder
02. marts 2004 - 15:05 #10
Jeg sender en forspørgsel fra min asp applikation for at finde ud af om siden med den angivet dato kan oprettes, eller om den kommer om i konflikt med en eksisterende side.
Avatar billede venne Nybegynder
02. marts 2004 - 15:08 #11
Det virker ikke med datoer på den måde, prøv:

SELECT    *
FROM        tblSider
WHERE    ("01-03-2004" <= datoTil) AND ("02-03-2004" >= datoFra)

Eller for at være helt sikker på at datoerne ikke bliver misforstået:

SELECT    *
FROM        tblSider
WHERE    ("20040301" <= datoTil) AND ("20040302" >= datoFra)
Avatar billede c-sharp Nybegynder
02. marts 2004 - 15:16 #12
Så fik jeg endelig et resultat ud af min forspørgsel :-)

SELECT    *
FROM        tblSider
WHERE    ('20040301' <= datoTil) AND ('20040302' >= datoFra)

Der skal åbenbart kun vær plin (') omkring dato.

Venne du skal have mange tak for hjælpen! Smid et svar så er det velfortjente point!
Avatar billede venne Nybegynder
02. marts 2004 - 15:19 #13
ok, velbekomme
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