0

2つのパラメータ@yrを取得し@period@periodは月の数値であるため、たとえば7月は7になります。

私のストアドプロシージャテーブルには、Date単なる標準datetimeフィールドであるという列があります。where現在の期間から1年を引いた値よりも大きいすべての日付を計算する句が必要なので、「2011年1月7日」(英国の日付形式)よりも大きいすべての日付を返す句が@period = 7 and @yr = 2012必要な場合、2つだけでこれを実現するにはどうすればよいですか。とwhereからの数字。@period@yr

WHERE <br>
Date >= '01-07-2011'
4

6 に答える 6

3

あなたは出来る

Date >= dateadd(month, @period-1, dateadd(year, @yr-1900, 0))
于 2012-09-11T14:03:45.813 に答える
2
where year(date)>year(getdate()-1) and month(date)>@period
于 2012-09-11T14:00:03.800 に答える
2

sargableが必要な場合は、datetimeに変換します。

declare @year int = 2012
declare @month int = 7

select 
   ...
where [Date] >= convert(datetime, convert(varchar(4), @year) 
                       + right('0' + convert (varchar(2), @month), 2) 
                       + '01')

Alex K.の答えを見た後、あなたはこれをするかもしれません:

dateadd(month, @month - 1 + (@year-1900) * 12, 0)
于 2012-09-11T14:01:05.263 に答える
1

最高のパフォーマンスを得るには、次のようにする必要があります。

declare @yr int = 2012
declare @period int = 7

select ...
from ....
WHERE date >= dateadd(month, (@yr - 1901) * 12 + @period - 1, 0)
于 2012-09-11T14:07:14.813 に答える
0

日付全体と比較することを確認してください。私が提供する解決策の1つは次のとおりです。

Select *
  from TheTable
 where date> DateAdd(Year,-1, convert(datetime, '01/'+convert(varchar,@period)+'/' + convert(varchar,@yr)))

SQL Server 2012の地域形式の違いを説明するには、次のようにします。

Select *
  from TheTable
 where date> DateAdd(Year,-1, DateFromParts(@year,@period,1))

2012年以前の場合:

Select *
  from TheTable
 Where Date > DateAdd(day, 0, DateAdd(month, @period-1, DateAdd(year, (@yr-1900)-1,0)))

@ yr-1900は、1900からの基準日のオフセットの計算を説明するために維持され、1年の日付の計算では1を減算します。

于 2012-09-11T14:08:35.717 に答える
0

私たちは多くの方法でそれを行うことができます

それを試してみてください

DECLARE @a VARCHAR(20),
        @b VARCHAR(10),
        @c varchar(4)

SET @b='may'  /*pass your stored proc value */
SET @c='2011'

SET @a='01'+@b+@c
SET DATEFORMAT YDM
SELECT CAST(@a AS DATE)

FOR uk formate

SELECT CONVERT(char,CAST(@a AS DATE),103)
于 2012-09-11T14:14:22.193 に答える