7

先月を取得するクエリを作成していますが、時刻はゼロです (今日が 2013-05-21 の場合、2013-04-21 00:00:00.000 を取得したい)。

だから私は試しました:

select (dateadd(month,datediff(month,(0),getdate())-1,(0)));

しかし、私は前月の最初の日を取得します。

それから私は試しました:

select dateadd(month, -1, GETDATE());

私は正しい日を取得しますが、現在の時刻 (2013-04-21 11:41:31.090) も取得し、時刻をゼロにしたいと考えています。

2013-04-21 00:00:00.000 のようなものを取得するには、どのようにクエリを実行すればよいですか?

前もって感謝します。

4

4 に答える 4

26

SQL Server 2008 には、date時間が付加されていないデータ型があります。したがって、変換してからDateAdd.

SELECT DateAdd(month, -1, Convert(date, GetDate()));

dateこれはデータ型を返します。強制的に元にdatetime戻すには、もう 1 つ追加するだけですConvert

SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));

ただし、への明示的な変換は必要ない場合がありdatetimeます。

注: 「今日から 1 か月前」はさまざまな方法で定義できます。SQL サーバーでの動作方法は、前月から現在の月と同じ日に最も近い日を返すことです。これは、この式を 3 月 31 日に実行した場合の結果が 2 月 28 日になることを意味します。したがって、特定のシナリオでは、この影響について明確に考えないと、期待される結果が得られない場合があります。別の月に同じ日を取得することを期待して、月の計算を複数回行います (3 月 -> 2 月 -> 1 月など)。

SQL Fiddle でライブ デモを見る

デモは、各式の値と結果のデータ型を示しています。

于 2013-05-21T16:46:07.337 に答える
4

このようにしてみてください..

   select Cast(Cast(dateadd(month, -1, GETDATE()) as Date) as Datetime);
于 2013-05-21T16:47:38.187 に答える
1

あなたはこれを使うことができます、それはかなりシンプルで私にとってはうまくいきました -

SELECT SUM( amount ) AS total FROM expenses WHERE MONTH( date ) = MONTH( curdate() ) -1

于 2015-09-24T07:29:14.557 に答える