0

私はSQLCEが初めてで、使用するコードの一部のコード行を本当に理解していません。ログを記録するデータベースがあり、ログ データを取得しようとしています。次のコードが取得する期間を教えてください。ロギングのどこかに期間のバグがあるため、この形式を読み取ることができません私はそれが初めてです)

d1 = (int)SqlHelper.ExecScalar("select count(*) from Report where OpenTime  > DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0) and type='0'");

また、もう一つあります

 d2 = (int)SqlHelper.ExecScalar("select count(*) from Report where OpenTime  between DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)) and DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0) and type='0'");

CE 環境で使用される SQL データベースである SQLCE (サーバー) を更新します。

d1 と d2 の受信期間は?

D1 は合計で 1 年のはずですが、縫い目が間違っています

D2 月の合計と継ぎ目が間違っていますか?

4

2 に答える 2

0

sqlite 言語のドキュメントで DATEADD または DATEDIFF 関数を見つけることができませんが、たとえば SQL Server の関数を意味する場合は、Google で簡単に検索すると、次の2 つの 答えが得られます。

DATEDIFF() 関数は、2 つの日付の間の時間を返します。

soDATEDIFF(yy,0,GETDATE())は、0 と現在の間の時差を年単位で返します。

DATEADD() 関数は、指定された時間間隔を日付から加算または減算します。

したがってDATEADD(yy,*your_time_difference*,0)、 *your_time_difference* 年が追加された日付 0 が返されます。

d2 についても同様です。

于 2013-07-23T14:31:14.417 に答える
0

SQLServer では、前者のクエリは type = '0' で OpenTime が年の最初の日の午前 0 時よりも大きいカウントを選択します。>=年初来を取得するには、これを(の代わりに) に修正する必要があり>ます。

繰り返しになりますが、SQLServer では、後者のクエリは type = '0' で、OpenTime が前月の最初の日の午前 0 時から当月の最初の日の午前 0 時までの間にあるカウントを選択します。これはおそらく次のように修正する必要があります。

OpenTime >= DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)) and
OpenTime < DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)

- 前月のカウントを取得します。

于 2013-07-23T14:31:40.687 に答える