---
title: "Krånglig fråga med klockslag!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/174069-krånglig-fråga-med-klockslag"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "oskars"
published: "2008-09-15T17:40:55.000Z"
updated: "2008-10-03T10:04:36.000Z"
replies: 131
views: 4278
page: 1
pages: 7
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/174069-krånglig-fråga-med-klockslag"
---

# Krånglig fråga med klockslag!

_Sida 1 av 7._

## #1 — oskars, 2008-09-15T17:40Z

Hej!

Nu sitter jag här. Återigen. Jävla SQL. Jag vet inte hur jag ska tänka. Så fort frågan blir komplicerad så fastnar jag. Jag ska försöka sammanfatta mitt problem:

Min tabell:

```
Startdatum;Starttid;Slutdatum;Sluttid
```

```
20080725;1415;20080725;1425
20080725;1420;20080725;1435
20080725;1325;20080725;1425
20080725;1505;20080725;1550

20080725;2205;20080725;2230
20080725;2145;20080725;2210
20080725;2235;20080725;2300
```

Det jag vill få ut ur databasen är hur många klockslag som överlappar varandra totalt, under valda klockslag.

Så här:

```
Mellan 14:00 - 14:30 = 3st
Mellan 22:00 - 22:30 = 2st
```

14:00-14:30  och   14:30-15:00 överlappar Inte varandra :)

Hoppas ni förstår vad jag menar!

Det går säkert att lösa på logiskt vis. Jag har försökt med BETWEEN osv... men den ska ju räkna tider som överlappar varandra under två utvalda klockslag. Då funkar det inte med enbart BETWEEN.

Eller tänker jag fel?

Mvh
Oskar

Permalänk: https://www.webforum.nu/p/174069

## #2 — Peter S, 2008-09-15T17:51Z

\- Hur sparas värdena, är det strängar?
\- Kan indatat alltså vara t.ex. "14:00" och "14:30" som i "hur många tider finns inom 14:00 och 14:30"?

Permalänk: https://www.webforum.nu/p/2141796

## #3 — oskars, 2008-09-15T18:14Z

Tiderna sparas som "1433"... som tal. Samma sak med datumen 20070825.

Ja precis:

"Hur många tider överlappar varandra mellan "1400" och "1430".

Hur gör man om det är tider mellan 2300 och 0100?

Tack för att du tar dig tid!!

Permalänk: https://www.webforum.nu/p/2141800

## #4 — Peter S, 2008-09-15T18:24Z

Det kan med andra ord finnas rader som går över flera dagar? Har datumet ingen betydelse, d.v.s. om indatat är "14:00" och "14:30" så skall både 20080724;1405;20080724;2300 och 20080727;1420;20080727;1700 räknas?

Permalänk: https://www.webforum.nu/p/2141803

## #5 — oskars, 2008-09-15T18:34Z

Jo, vissa rader går över 1st dag.. alltså 23-01 t.ex.. .aldrig mer

Det är bara från 1st datum som resutlatet ska hämtas... Men en rad kan ju börja på 23 och sluta 01... och om man ställer en fråga typ mellan 23:00 och 00:30 så ska den följa med. :)

Permalänk: https://www.webforum.nu/p/2141806

## #6 — Peter S, 2008-09-15T18:39Z

```
select sum(case when (starttid > <tid1> and starttid < <tid2>)
           or (sluttid > <tid1> and sluttid < <tid2>)
           or (starttid < <tid1> and starttid < <tid2> and startdatum < slutdatum)
           or (sluttid > <tid1> and sluttid > <tid2> and startdatum < slutdatum)
       then 1 else 0 end)
  from t
```

...där \<tid1\> = den första in-tiden och \<tid2\> = den andra in-tiden. Starttid, sluttid, startdatum och slutdatum är kolumnnamnen och t är tabellnamnet. Ovanstående syntax fungerar i åtminstone MySQL och MSSQL.

Med reservation för eventuella blackouter som kan ha inträffat :)

Permalänk: https://www.webforum.nu/p/2141807

## #7 — oskars, 2008-09-15T18:49Z

Glömde såklart att nämna att det är Access som gäller! Kan säkert byta till MySQL om det skulle vara så. Men ska testa och se om den funkar i Access :)

Tack! Ska testa så snart jag hinner!

Permalänk: https://www.webforum.nu/p/2141811

## #8 — Peter S, 2008-09-15T18:52Z

Det fungerar inte i Access. Testa i stället:

```
select sum(iif((starttid > <tid1> and starttid < <tid2>)
           or (sluttid > <tid1> and sluttid < <tid2>)
           or (starttid < <tid1> and starttid < <tid2> and startdatum < slutdatum)
           or (sluttid > <tid1> and sluttid > <tid2> and startdatum < slutdatum),
       1,0))
  from t
```

Permalänk: https://www.webforum.nu/p/2141812

## #9 — oskars, 2008-09-15T19:38Z

Jag testar, men får det inte att fungera:

```
<%	
	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db.mdb")
	
	Starttid = 1400
	Sluttid = 1500
	
	Set RecSet = Server.CreateObject("ADODB.Recordset")
	RecSet.Open "SELECT SUM(iif((starttid > "&Starttid&" and starttid < "&Sluttid&") OR (sluttid > "&Starttid&" and sluttid < "&Sluttid&") " & _
				"OR (starttid < "&Starttid&" and starttid < "&Sluttid&" and startdatum < slutdatum) OR (sluttid > "&Starttid&" and sluttid > "&Sluttid&" and startdatum < slutdatum),1,0)) " & _
  				" AS tal FROM kontant WHERE NOT K1 = 6", Connect, 3, 3
	
	Color = "EEE"
	Do Until RecSet.EOF

		Response.Write RecSet("tal")

	RecSet.MoveNext
	Loop
%>
```

```
Microsoft OLE DB Provider for ODBC Drivers error '80040e10' 

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2. 

test.asp, line 19
```

Permalänk: https://www.webforum.nu/p/2141821

## #10 — Peter S, 2008-09-15T19:42Z

Vad får du med 

```
response.write "SELECT SUM(iif((starttid > "&Starttid&" and starttid < "&Sluttid&") OR (sluttid > "&Starttid&" and sluttid < "&Sluttid&") " & _
				"OR (starttid < "&Starttid&" and starttid < "&Sluttid&" and startdatum < slutdatum) OR (sluttid > "&Starttid&" and sluttid > "&Sluttid&" and startdatum < slutdatum),1,0)) " & _
  				" AS tal FROM kontant WHERE NOT K1 = 6"
```

Permalänk: https://www.webforum.nu/p/2141824

## #11 — oskars, 2008-09-15T19:45Z

NU fick jag det att fungera! Men vart väljs datumet? Är det bara att lägga till WHERE Startdatum = 20080725? Hittar den även tider som går över tilll 01:00 20080726?

EDIT:

Jag vill alltså ställa frågan:
Den 25 Februari mellan 14:00 och 14:30... hur många tider överlappade varandra då?

Permalänk: https://www.webforum.nu/p/2141825

## #12 — Peter S, 2008-09-15T19:46Z

Japp!

Permalänk: https://www.webforum.nu/p/2141826

## #13 — oskars, 2008-09-15T19:49Z

Fast det funkar ju inte, eftersom "startdatum" inte är med i SELECTen... Fick det inte att funka med SELECT startdatum, SUM....) heller...

Permalänk: https://www.webforum.nu/p/2141828

## #14 — Peter S, 2008-09-15T19:51Z

Varför fungerar inte det?

Permalänk: https://www.webforum.nu/p/2141829

## #15 — oskars, 2008-09-15T19:51Z

:)

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

\[Microsoft\]\[ODBC Microsoft Access Driver\] You tried to execute a query that does not include the specified expression 'Startdatum' as part of an aggregate function. 

/taxi/test.asp, line 19

Permalänk: https://www.webforum.nu/p/2141831

## #16 — Peter S, 2008-09-15T19:52Z

Om du bara har med startdatum i WHERE och inte i SELECT?

Permalänk: https://www.webforum.nu/p/2141832

## #17 — oskars, 2008-09-15T19:56Z

Jo nu fungerade det :) Såna här frågor är out of my league :) Men till slut går det med lite hjälp!

Hur kan jag nu utveckla frågan så att jag t.ex vill välja att enbart göra den här sökning på enbart där Weekday(Startdatum) = 6? Ska testa lite själv, men du får gärna ge lite tips!

Permalänk: https://www.webforum.nu/p/2141834

## #18 — Peter S, 2008-09-15T19:58Z

Lägg till villkor i WHERE:

```
...where weekday(...) = 6 and X <> Y...
```

Permalänk: https://www.webforum.nu/p/2141835

## #19 — oskars, 2008-09-15T20:03Z

Jo, jag testade det, men eftersom datumet står så här: 20080725 så måste jag formatera det på något sätt. 

Så jag testade det här:

```
weekday(FormatDateTime(Left(Startdatum,4) &""-""& Left(Right(Startdatum,4),2) &""-""& Right(Startdatum,2),2)) = 6
```

Vilket gav mig:

```
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][ODBC Microsoft Access Driver] Undefined function 'FormatDateTime' in expression. 

/taxi/test.asp, line 19
```

Permalänk: https://www.webforum.nu/p/2141838

## #20 — Peter S, 2008-09-15T20:08Z

FormatDateTime är ingen Access-funktion. Du kanske får använda Format() i stället: <http://www.techonthenet.com/access/functions/date/format.php>

Permalänk: https://www.webforum.nu/p/2141841

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/174069-krånglig-fråga-med-klockslag  
Nästa sida: https://www.webforum.nu/amne/databaser-sql/174069-krånglig-fråga-med-klockslag/page2.md
