0

こんにちは私は2列のテーブルtab1を持っています。値は次のようになります

SL_NO     CAL_DATE
807        2012-03-18
808        2012-03-19
....
1170       2013-03-16

この表から、sl_noの範囲が807と1170の間で選択する必要があります。これとは別に、week_no_of_monthとweek_no_of_yearの2つの派生列を選択する必要があります。

week_no_of_monthは、期間の4週間のように、第1週の最初の7日間、第2週の次の7日間になります。次に、第1週から7日ごとに4に達するまで初期化する必要があります。

week_no_of_yearは1から始まり、52に達するまで7日ごとに継続します。

これで私を助けてください。

4

2 に答える 2

1

組み込みのDATE_PARTウィークを試しましたか?それを使用できますか?

SELECT DATEPART( WEEK , 'May 2, 2012')

http://www.sqlfiddle.com/#!3/e93ae/2


再:

ここでの週番号は、この範囲内でフェッチしている最初のレコードの1から開始する必要があります。これは通常のカレンダーの週番号ではありません

これを試して:

SELECT 

z.filter_date, x.d, 

(datediff(day,z.filter_date, x.d) / 7) + 1 as week_number

from x
cross join (select convert(date,'march 7, 2012') as filter_date) as z
where x.d >= z.filter_date

データ:

create table x(i int identity(1,1) primary key, d date);

insert into x(d) values
('February 2, 2012'),
('February 5, 2012'),
('March 7, 2012'),
('April 8, 2012'),
('May 9, 2012'),
('June 9, 2012');

出力:

FILTER_DATE D               WEEK_NUMBER
2012-03-07  2012-03-07      1
2012-03-07  2012-04-08      5
2012-03-07  2012-05-09      10
2012-03-07  2012-06-09      14

ライブテスト:http ://www.sqlfiddle.com/#!3 / e4837 / 12

于 2012-05-02T14:14:53.300 に答える
1

正確に何が必要なのかわかりません。これはあなたの質問に答えますが、これは尋ねるべき質問ではないと思います:

select datediff (day, 
                 convert(varchar(4), year(CAL_DATE)) + '0101', 
                 CAL_DATE) / 7 + 1 WeekOfYear,
       (day(CAL_DATE) - 1) / 7 + 1 WeekOfMonth

Sql Server が提供する週番号を参照してください。

更新

declare @startOfFiscalYear as datetime
set @startOfFiscalYear = '20120318'

select datediff (day, 
                 @startOfFiscalYear, 
                 CAL_DATE) / 7 + 1 WeekOfYear,
       ((datediff (day, @startOfFiscalYear, CAL_DATE)) / 7 % 4) + 1 WeekOfMonth

WeekOfYear は単純に 1 年のうちの日を 7 で割ったものです。WeekOfMonth は 1 年のうちの日を 7 で割った後、モジュラスのみを残して 4 で割ったものです。

于 2012-05-02T14:04:48.943 に答える