Vinnaren i pepparkakshustävlingen!
2012-12-18, 17:02
  #1
Medlem
Skulle vilja ha rätt värden på följande, hur löser man det i T-SQL?

08:15 - 08:30 --> ska ge 15 min
08:30 - 08:15 --> ska ge -15 min
23:50 - 00:05 --> ska ge -15 min
Citera
2012-12-18, 17:32
  #2
Medlem
datediff(minute, startvalue, endvalue)
Citera
2012-12-18, 21:41
  #3
Medlem
Citat:
Ursprungligen postat av Gislo
datediff(minute, startvalue, endvalue)

Om det vore så enkelt

Skämt åsido ska min funktion dels räkna ut tidskillnaden mellan två klockslag där start kan vara senare än end och tvärtom. Därutöver ska samma funktion räkna ut tidskillnaden mellan två klockslag på två olika sidor om ett dygnskifte, t ex att skillnaden mellan 00:05 och 23:50 är 15 minuter och inte över 1300 minuter som jag får i T-SQL.

IF @StartTime > @EndTime --Start efter End
...
ELSE IF @EndTime > @StartTime --End efter Start (vanligast)
...
ELSE IF ???? -- Start före End, men före ett dygnskifte, t ex 23:50 - 00:05
...
Citera
2012-12-18, 22:22
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av PN
Om det vore så enkelt

Skämt åsido ska min funktion dels räkna ut tidskillnaden mellan två klockslag där start kan vara senare än end och tvärtom. Därutöver ska samma funktion räkna ut tidskillnaden mellan två klockslag på två olika sidor om ett dygnskifte, t ex att skillnaden mellan 00:05 och 23:50 är 15 minuter och inte över 1300 minuter som jag får i T-SQL.

IF @StartTime > @EndTime --Start efter End
...
ELSE IF @EndTime > @StartTime --End efter Start (vanligast)
...
ELSE IF ???? -- Start före End, men före ett dygnskifte, t ex 23:50 - 00:05
...
Hjälper den här tro?

http://stackoverflow.com/questions/1...-in-sql-server
Citera
2012-12-18, 22:50
  #5
Medlem
Citat:
Ursprungligen postat av Proton
Hjälper den här tro?

http://stackoverflow.com/questions/1...-in-sql-server

Nop, jag har inga datetime, bara time. Dessutom så täcker den inte dygnsskifte.
Citera
2012-12-19, 01:26
  #6
Medlem
Får man fråga varför du inte lagrar det i datetime? Är detta ett hypotetiskt fall?
Ge exempel på data att laborera med (CREATE TABLE.... INSERT INTO...)
Citera
2012-12-19, 07:43
  #7
Medlem
Citat:
Ursprungligen postat av Gislo
Får man fråga varför du inte lagrar det i datetime? Är detta ett hypotetiskt fall?
Ge exempel på data att laborera med (CREATE TABLE.... INSERT INTO...)

Det var time-typer från början, tyvärr. Dessutom är datumet ospecat.
Citera
2012-12-19, 10:27
  #8
Medlem
fnirps avatar
Citat:
Ursprungligen postat av PN
Om det vore så enkelt

Skämt åsido ska min funktion dels räkna ut tidskillnaden mellan två klockslag där start kan vara senare än end och tvärtom. Därutöver ska samma funktion räkna ut tidskillnaden mellan två klockslag på två olika sidor om ett dygnskifte, t ex att skillnaden mellan 00:05 och 23:50 är 15 minuter och inte över 1300 minuter som jag får i T-SQL.

IF @StartTime > @EndTime --Start efter End
...
ELSE IF @EndTime > @StartTime --End efter Start (vanligast)
...
ELSE IF ???? -- Start före End, men före ett dygnskifte, t ex 23:50 - 00:05
...

Det finns en motstridighet i vad du vill göra. Hur ska funktionen veta att det handlar om ett dygnsskifte är inblandat om datum inte finns med, samtidigt som den ska klara av negativ tid? Om man tar ditt exempel, 23:50 och 00:05 så kan det ju antingen handla om svaren -23:45 eller +00:15.
Citera
2012-12-19, 10:56
  #9
Medlem
Citat:
Ursprungligen postat av fnirp
Det finns en motstridighet i vad du vill göra. Hur ska funktionen veta att det handlar om ett dygnsskifte är inblandat om datum inte finns med, samtidigt som den ska klara av negativ tid? Om man tar ditt exempel, 23:50 och 00:05 så kan det ju antingen handla om svaren -23:45 eller +00:15.

Ja, om man gör en DATEDIFF där 23:50 är före 00:05 går det väl att konstatera att ett dygnskifte är inblandat oavsett datum?
Citera
2012-12-19, 22:55
  #10
Medlem
fnirps avatar
Citat:
Ursprungligen postat av PN
Ja, om man gör en DATEDIFF där 23:50 är före 00:05 går det väl att konstatera att ett dygnskifte är inblandat oavsett datum?

Jag är uppenbarligen trög eller har missat något väsentligt... Jag resettar mig själv och börjar om från början :-)

Citat:
08:15 - 08:30 --> ska ge 15 min
08:30 - 08:15 --> ska ge -15 min
23:50 - 00:05 --> ska ge -15 min

Skämt åsido ska min funktion dels räkna ut tidskillnaden mellan två klockslag där start kan vara senare än end och tvärtom. Därutöver ska samma funktion räkna ut tidskillnaden mellan två klockslag på två olika sidor om ett dygnskifte, t ex att skillnaden mellan 00:05 och 23:50 är 15 minuter och inte över 1300 minuter som jag får i T-SQL.

Jag förutsätter att tredje exemplet ska (som du senare skriver) ska bli 15 minuter och inte -15 minuter.

Hur ska en funktion veta skillnaden mellan variant två och tre? Att det i tredje exemplet är plustid över ett dygnsskifte och inte negativ tid på ett och samma dygn? I min värld blir det 15 min, -15 min och -1425 min som svar.

Eller vill du ha någon mer logik inblandad? Tex att är svaret mindre än -1000 minuter, så ska man plussa på ett dygn (1440 minuter) så man får sitt 15 minuterssvar på sista frågan?

Inte ens om tid 1 alltid var starttid och tid 2 stopptid, så skulle man veta om 08:15 och 08:30 inträffade samma dag, dvs man kan få 15 minuter eller 1455 minuter som svar...

Jag skulle se över datamodellen för den är inte helt optimal iallfall... Lycka till :-)
Citera
2012-12-20, 11:10
  #11
Medlem
Ja, som fnirp skriver - och eftersom du inte delar med dig av ett sample kan man inte se om det verkligen är precis så här galet du beskriver det, eller övht hur det är uppsatt så man kan laborera - bara anta!

Men lycka till.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback