Avatar billede bhn.314 Nybegynder
15. juni 2004 - 10:53 Der er 6 kommentarer og
3 løsninger

00:01 efter 23:59

Jeg har en forespørgsel til en tidsplan ud fra en account på en given dag - a la:

SELECT  name, time, day
FROM    tblaccount
WHERE    day_id=1843;

Navn|Time |Day
A  |01:00|1843
B  |10:00|1843
C  |21:00|1843

Det jeg gerne vil have er:

Navn|Time |Day
B  |10:00|1843
C  |21:00|1843
A  |01:00|1843

Altså så 01:00 kommer efter 21:00 og ikke før. Det skal skille kl. 09:00. Nu har jeg rodet
med det i #¤%& lang tid.
Avatar billede Slettet bruger
15. juni 2004 - 11:51 #1
Hvis datatypen på feltet time er varchar2 eller ligenende kan du bruge følgende:
SELECT  name, time, day
FROM tblaccount
WHERE day_id=1843
ORDER BY to_number(substr(time,1,2),'99'), substr(time,4,2)
Avatar billede Slettet bruger
15. juni 2004 - 11:58 #2
Ups! Jeg læste ikke dit problem rigtigt.
Prøv dette:

SELECT name, time, day
FROM tblaccount
WHERE day_id=1843
ORDER BY decode(sign(9-Time),-1,1,0),Time

"sign(9-Time)" skal justeres alt efter hvilken datatype "time" er.
Avatar billede Slettet bruger
15. juni 2004 - 11:59 #3
Prøver igen:
SELECT name, time, day
FROM tblaccount
WHERE day_id=1843
ORDER BY decode(sign(Time-9),-1,1,0),Time
Avatar billede bhn.314 Nybegynder
15. juni 2004 - 12:06 #4
Problemet er at vi ikke vil bruge Oracle specifikke funktioner, da vil gerne vil kunne udskifte databasen. Så det skal være SQL 95 standard. Ellers godt bud. Det virker......
Avatar billede Slettet bruger
15. juni 2004 - 12:25 #5
Hvad så med:

SELECT name, time, day
FROM tblaccount
WHERE day_id=1843
ORDER BY -(Time div 9),Time
Avatar billede Slettet bruger
15. juni 2004 - 12:40 #6
Ups. Giver problem efter kl. 18 - prøv dette i stedet:

SELECT name, time, day
FROM tblaccount
WHERE day_id=1843
ORDER BY Time*(Time div 9),Time
Avatar billede Slettet bruger
15. juni 2004 - 12:50 #7
Måske lidt søgt - men virker:

SELECT name, time, day
FROM tblaccount
WHERE day_id=1843
ORDER BY 2-((Time div 9)-(Time div 18)),Time
Avatar billede bhn.314 Nybegynder
15. juni 2004 - 13:08 #8
Hmmmm, kan ikke lige få det til at virke, meeeen det nok bare mig...
Avatar billede Slettet bruger
16. juni 2004 - 09:15 #9
Kan også skrives sådan:

SELECT name, time, day
FROM tblaccount
WHERE day_id=1843
ORDER BY 2-(trunc(Time/9)-trunc(Time/18)),Time
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