2017-07-17 8 views
0

構文を修正するのに手伝ってください。 私はSQLサーバーに以下のコードを書く必要があります。 これはOracleデータベースでは問題なく動作しています。SQL Serverクエリ - 構文の修正

Select to_number(substr((((END_TS - BEGIN_TS)*(24*60*60))),1,10)) AS EXECUTION_TIME 
from TABLE B 

またEND_TSBEGIN_TSdatetimeデータ型です。

+0

この式では、END_TS - BEGIN_TS' –

+1

となり、これを使用して2つの日付を減算するEND_TS - BEGIN_TSの場合は、[DATE_DIFF](https://docs.microsoft.com/ja)を使用します。 SQL Serverの –

+0

にある-us/sql/t-sql/functions/datediff-transact-sql)END_TSとBEGIN_TSはMySQLのdatetimeカラムです。 Oracleのタイムスタンプ列ですか?さらに、この問合せがORA-906を引き起こすことを知っていますか?あなたはあなたの投稿に正しい質問文を貼り付けていますか? – jeff6times7

答えて

0

SQLでは、Oracleで使用できるように、日付に直接計算を実行することはできません。あなたはそれを操作する前に差異を計算するdatediff関数を適用する必要があります。除数での式は(したがって、」0.0" )、その中に浮動小数点数を持っている必要があること

select convert(numeric(10,9),left(datediff(second,begin_ts,end_ts)/(24.0*60*60),10)) from table; 

注意それ以外の結果を整数に丸められます。

日付計算を実行すると、left関数はOracleの部分文字列に相当します。それはvarcharに変換し、最初の10文字を取ります。 Convertは、数値に戻ります。これは、Oracleの可変長番号に相当します。 10進数の後に数字が来ることをconvertに伝える必要があります。それ以外の場合は丸めます。

最初の10文字の部分文字列には悪い匂いがあります。このスニペットは、最初の10文字に制限することなく計算を行います。

select datediff(second,begin_ts,end_ts)/(24.0*60*60) from table; 

また、Oracleバージョンでは小数点以下の日付が提供されます。あなたが一日だけを必要とするならば、datepartパラメータとして "day"をdatediffに使用してください。

+0

Stevenさん、ありがとうございます。実行することはできますが、to_number(部分文字列(a、1,10))部分を処理する方法は? – Jocky

+0

ハッキングのように見える文字列処理を追加するように編集しました。 。 –

関連する問題