1

データベースをOracleからSQLServerに変換します。Oracleが日付で実行できるのと同様の何かが必要です。

... WHERE tbl.date_col < sysdate - 1.234

ここで、floatは日数の小数を表します(float値が渡されます)。

DATEADDは、2番目の引数に整数のみを受け入れるため、機能しません。事前に数学をしてから、

DATEADD(year, ?, DATEADD(month, ?, DATEADD(day, ?, DATEADD(hour, ?, 
  DATEADD(well, you get the picture)))))

よりエレガントで読みやすい解決策があることを教えてください。:)

4

1 に答える 1

3

SQL Serverは、この機能から完全に離れつつあります。たとえば、次のように言うことができます。

SELECT GETDATE() + 1;

ただし、新しい日付/時刻タイプではこれを行うことはできなくなります。例:

SELECT CONVERT(DATE, GETDATE()) + 1;

収量:

メッセージ206、レベル16、状態2、行1
オペランドタイプの衝突:日付はintと互換性がありません

したがって、これには使用をやめFLOAT、日付の計算を短縮することを強くお勧めします。日数の小数部を減算しようとしている場合は、最初にそれを最も重要な粒度に変換してから、DATEADDその粒度で使用します。たとえば、次の問題は問題なく機能します。

WHERE tbl.date_col < DATEADD(SECOND, 86400*-1.234, GETDATE());
于 2013-02-12T16:18:29.507 に答える