In SQL Server kann Mathematik nicht direkt auf Daten ausgeführt werden, wie es in Oracle möglich ist. Sie benötigen eine datediff Funktion anzuwenden, um die Differenz zu berechnen, bevor Sie sie manipulieren:
select convert(numeric(10,9),left(datediff(second,begin_ts,end_ts)/(24.0*60*60),10)) from table;
Beachten Sie, dass der Ausdruck in dem Divisor eine Fließkommazahl in ihm haben muß (daher die“0,0"), ansonsten das Ergebnis wird auf eine Ganzzahl gerundet.
Nach der Datumsberechnung entspricht die left-Funktion der Teilzeichenfolge in Oracle. Es konvertiert in ein varchar und nimmt dann die ersten 10 Zeichen. Convert kehrt dann zu einem numerischen Wert zurück, der der Variablenlänge von Oracle entspricht. Es ist notwendig, convert mitzuteilen, dass Sie Ziffern nach der Dezimalzahl erwarten, andernfalls wird es gerundet.
Der Teilstring für die ersten 10 Zeichen hat einen schlechten Geruch, würde ich es auslassen. Dieses Snippet führt die Berechnung aus, ohne auf die ersten zehn Zeichen zu beschränken.
select datediff(second,begin_ts,end_ts)/(24.0*60*60) from table;
Beachten Sie auch, dass die Oracle-Version Bruchdaten bietet. Wenn Sie nur den ganzen Tag haben wollten, dann benutzen Sie "Tag" als Datepart-Parameter, um datediff.
Was passiert in Orakel in diesem Ausdruck 'END_TS - BEGIN_TS' –
Wenn Sie' END_TS - BEGIN_TS' verwenden, um zwei Daten zu subtrahieren, sollten Sie [DATE_DIFF] (https://docs.microsoft.com/en -us/sql/t-sql/Funktionen/datediff-transact-sql) in 'SQL Server' –
Also END_TS und BEGIN_TS sind Datetime Spalten in MySQL. Sind sie Timestamp-Spalten in Oracle? Wussten Sie außerdem, dass diese Abfrage einen ORA-906 verursacht? Sind Sie sicher, dass Sie den richtigen Text der Abfrage in Ihren Post einfügen? – jeff6times7