Hallo zusammen,
folgendes Problem: eine interene, selbst entwickelte Software lief bislang mit einer MySQL Datenbank. Diese Software soll nun nicht mehr nur intern verwendet werden und eine der Grundvoraussetzung dafür ist, dass als Datenbanksystem fortan eine MS SQL Datenbank benutzt wird. Dies bedeutet, dass einige Queries in der Software umgeschrieben werden müssen. Bis lang war das für mich alles machbar, jetzt hänge ich aber an einer für mich ziemlich komplexen Abfrage. Orignal in MySQL sah diese so aus:
Zuerst werden also die Variablen @avdrytime, @avwettime, usw. gefüllt. Diese werden im letzten SELECT statement benutzt. Innerhalb diese Statements werden Variablenwerte auch wieder überschrieben, um damit weiterzurechnen und so Zeiten für jede Eregebniszeile aufzusummieren. Abgesehen von den unterschiedlichen DATE und TIME-functions in MS SQL sind hauptsächlich das Zuweisen von neuen Variablenwerten innerhalb von anderen Funktion und das IF statement innerhalb einer Rechenoperation das Problem. Mein aktueller Query für MS SQL, wenn auch nicht vollständig umgesetzt sieht wie folgt aus:
Da bin ich dann mit meinem Latein auch am Ende und habe leider keinen blassen Schimmer wie ich dieses Statement von MySQL in MS SQL übersetzten kann. Vielleicht kann einer von euch helfen.
Besten Dank und viele Grüße
Andy
folgendes Problem: eine interene, selbst entwickelte Software lief bislang mit einer MySQL Datenbank. Diese Software soll nun nicht mehr nur intern verwendet werden und eine der Grundvoraussetzung dafür ist, dass als Datenbanksystem fortan eine MS SQL Datenbank benutzt wird. Dies bedeutet, dass einige Queries in der Software umgeschrieben werden müssen. Bis lang war das für mich alles machbar, jetzt hänge ich aber an einer für mich ziemlich komplexen Abfrage. Orignal in MySQL sah diese so aus:
Code:
SELECT tdry FROM avlaptimes WHERE serid = 1 and trackid = 7 INTO @avdrytime; SELECT twet FROM avlaptimes WHERE serid = 1 and trackid = 7 INTO @avwettime; SELECT CAST(startt AS TIME) FROM sessions WHERE sessid = 505 INTO @startt; SELECT laptime_offset_out FROM events WHERE eventid = 84 INTO @offset_out; SELECT laptime_offset_in FROM events WHERE eventid = 84 INTO @offset_in; SELECT CAST(ADDTIME(ADDTIME(@startt, runtime_sum),@prept_sum:=ADDTIME(@prept_sum,SEC_TO_TIME((prept*60) + prept_s))) AS TIME) AS StartOfRun,CAST(ADDTIME(ADDTIME(@startt, CAST(@runtime_sum:= ADDTIME(@runtime_sum,CAST(@runtime:=SEC_TO_TIME(laps*IF(wet = 0, @avtime:=@avdrytime,@avtime:=@avwettime)+@offset_out+@offset_in) AS TIME)) AS TIME)),@prept_sum) AS TIME) AS EndOfRun,pos, t.setname, wet, fuel, item, notes, done, rprunid, r.setid, typeid FROM rp_runs r JOIN (SELECT runtime_sum := cast('00:00:00' AS TIME)) B JOIN (SELECT @prept_sum := cast('00:00:00' as TIME)) C LEFT JOIN tyresets t on r.setid = t.setid WHERE sessid = 505 AND r.chid = 16 ORDER BY pos
Code:
DECLARE @avdrytime INT; DECLARE @avwettime INT; DECLARE @avtime INT; DECLARE @prept_sum TIME; DECLARE runtime TIME; DECLARE runtime_sum TIME; DECLARE @offset_out INT; DECLARE @offset_in INT; DECLARE @startt TIME; SELECT @avdrytime = tdry FROM avlaptimes WHERE serid = 1 AND trackid = 7; SELECT @avwettime = twet FROM avlaptimes WHERE serid = 1 AND trackid = 7; SELECT @startt = CAST(startt AS TIME) FROM sessions WHERE sessid = 505; SELECT @offset_in = laptime_offset_in FROM events WHERE eventid = 84; SELECT @offset_out = laptime_offset_out FROM events WHERE eventid = 84; SELECT CAST(DATEADD(second, DATEPART(second, DATEADD(second, DATEPART(second,@startt), runtime_sum)), SELECT @prept_sum = DATEADD(second, DATEPART(second, DATEADD(second, (prept*60) + prept_s, 0)), @prept_sum)) AS TIME) AS StartOfRun,CAST(ADDTIME(ADDTIME(@startt, CAST(@runtime_sum= ADDTIME(@runtime_sum,CAST(@runtime:=SEC_TO_TIME(laps*(IF (wet = 0) SELECT @avtime=@avdrytime ELSE SELECT @avtime=@avdrytime)+@offset_out+@offset_in) AS TIME)) AS TIME)),@prept_sum) AS TIME) AS EndOfRun,pos, t.setname, wet, fuel, item, notes, done, rprunid, r.setid, typeid FROM rp_runs r JOIN (SELECT runtime_sum = cast('00:00:00' AS TIME)) B JOIN (SELECT @prept_sum = cast('00:00:00' AS TIME)) C LEFT JOIN tyresets t on r.setid = t.setid WHERE sessid = 505 AND r.chid = 16 ORDER BY pos
Besten Dank und viele Grüße
Andy
Comment