0

基本的に、2 つの変数 (@month と @year) を前の月と年が何であれ、動的に設定しようとしています。

したがって、今日の場合@month = 7@year = 2012

しかし、私は今年のロールアラウンドのために何か安全なものが欲しいので、もしそうなら、1/1/2013私は@month = 12@year = 2012.

ありがとう!

これは私が持っているものです。

declare @month              int
declare @year               int

set @month = month (getDate ())-1
set @year = 2012
4

5 に答える 5

2

DATEADDを使用して、現在の日付から 1 か月を減算し、MONTHおよびYEAR部分を取得できます。

DECLARE @monthAgo dateTime
DECLARE @month int
DECLARE @year int

SET @monthAgo = DATEADD(month, -1, GETDATE())
SET @month = MONTH(@monthAgo)
SET @year = YEAR(@monthAgo)
于 2012-08-01T14:18:49.713 に答える
1

手順で示します。@Nowtest に割り当てられた値を変更できます。

DECLARE @Now DateTime = GETDATE();
DECLARE @Then DateTime = DATEADD(Month, -1, @Now);

DECLARE @Month Int = DATEPART(Month, @Then);
DECLARE @Year Int = DATEPART(Year, @Then);

SELECT @Month, @Year;
于 2012-08-01T14:18:18.950 に答える
0

単一のクエリとして、これは先月の最初の日を返します。

select DATEADD(month,DATEDIFF(month,'20010101',CURRENT_TIMESTAMP),'20001201')

必要に応じて、それを 2 つの個別の変数に引き離すことができますが、わざわざする必要はありません。(あなたがやっていることの残りは、datetimesではなくsでも作業していると思いますint


上記の 2 つのdatetime文字列が選択されているのは、2 番目の文字列が最初の文字列の 1 か月前に始まるという望ましい関係があるためです。

于 2012-08-01T14:18:42.507 に答える
0

あなたがすでに持っているものの後に、単に追加することはできません:

if @month = 0
begin
  set @month = 12
  set @year = @year - 1
end
于 2012-08-01T14:19:03.690 に答える
0

これを試して

declare @month int
declare @year int
Declare @dt datetime=getdate()
set @month = DATEPART(mm,DATEADD(mm,-1,@dt))
select @month
set @year = DATEPART(yy,DATEADD(mm,-1,@dt))
select @year
于 2012-08-01T14:23:36.480 に答える