Hejsan. Vilken databas gäller det? Vilken fälttyp lagras datum och tid i? Ser ut som text här, i sådana fall kan du göra såhär (kolla hur du slår ihop strängar i databasen du använder): Hej igen! Varför skall man lagra det i två skillda fält vilket ställer till problem just i detta läget. Eftersom man inte kan skriva som du gör. Du är tvungen att slå samman dem på något sätt. Normalt lagrar datum fält även tidsangivlerser. Hej. Borde det inte vara med några parenteser. Man kan inte göra jämförelser på det sättet. Detta ÄR SQL så visst kan man använda BETWEEN. Jag valde dock att använda mig av < och > i mitt exempel. Men man får exakt samma resultat med BETWEEN. Du behöver parenteser. Uttrycket kommer alltid att vara falskt eftersom tid >='1000' OCH tid <='0800' vilket inte lär bli några poster alls. Varför krångla till det ?Select-fråga.
Jag skulle behöva hjälp med att skapa en selectfråga som söker ut poster mellan ett datum, tid och ett annat datum, tid.
datum- och tidfälten ligger separata fält och mitt problem är att jag inte får några poster när jag skriver:
select * from labarb
where datum >= '20030423' and tid >= '1000'
and datum <= '20030424' and tid <= '0800';
Jag vet att det finns en post med datum '20030423' och tid '1203'. Jag vill alltså ha ut alla poster mellan klockan 1000 den 20030423 och klockan 0800 den 20030424
Antar att det har något med gruppering att göra men behöver lite hjälp!Sv: Select-fråga.
select * from labarb
where datum & tid >= '200304231000'
and datum & tid <= '200304240800';
/JohanSv: Select-fråga.
datum är av typen date
tid är av typen alphanumeric
Det finns inget sätt att använda sig av parenteser eller sub-selects?
MvhSv: Select-fråga.
Sv: Select-fråga.
Håller med föregående om att det vore smartare att lagra allt i ett DATE fält eftersom tidsdelen inkluderas i detta, men här kommer en idé:
select * from labarb
where to_date(datum || tid, 'YYYYMMDDHH24MI')
between to_date('200304231000', 'YYYYMMDDHH24MI')
and to_date('200304240800', 'YYYYMMDDHH24MI');Sv: Select-fråga.
select * from labarb
where (datum >= '20030423' and tid >= '1000')
and (datum <= '20030424' and tid <= '0800');Sv: Select-fråga.
Exempel data.
Datum Tid
2003-04-22 8:00:00
2003-04-22 12:00:00
2003-04-22 16:00:00
2003-04-23 8:00:00
2003-04-23 12:00:00
2003-04-23 16:00:00
2003-04-24 8:00:00
2003-04-24 12:00:00
2003-04-24 16:00:00
tid >= '1000' and tid <= '0800'
Kommer var tillåta att klockslag som är mindre eller lika med 8 och större eller lika med 10 och mellan den 23 och 24. Vilket inte stämmer med vad man vill åstakomma. Mqn vill ha ut det poster som ligger inom en angiven tidsrymd kl 10 den 23 till ocm de kl 8 den 24.Sv: Select-fråga.
/JohanSv: Select-fråga.
/MickeSv: Select-fråga.
Eftersom det är en Oracledatabas, använd då de funktioner som finns däri.
I mitt tidigare förslag missade jag att fältet "datum" var av datatyp DATE,
men här kommer korrigeringar:
Alt 1: Eftersom datatypen DATE alltid innehåller datum och tid,
inkludera tiden till datument när du gör insert/update.
ex:
insert into labarb (datum,.....) values (SYSDATE,....)
insert into labarb (datum,.....) values (to_date('200304231000', 'YYYYMMDDHH24MI'),....)
select * from labarb
where datum between to_date('200304231000', 'YYYYMMDDHH24MI')
and to_date('200304240800', 'YYYYMMDDHH24MI');
Alt 2: Konkatinera datum och tid och använd Oracle's date funktioner utan massa parentes krussiduller.
select * from labarb
where to_date(to_char(datum,'YYYYMMDD') || tid, 'YYYYMMDDHH24MI')
between to_date('200304231000', 'YYYYMMDDHH24MI')
and to_date('200304240800', 'YYYYMMDDHH24MI');