0

列のあるテーブルがありますempname,fdate,tdate,totleave

従業員が 1 月 28 日から 2 月 2 日までの合計 5 日間の休暇を取った場合、給与の準備中に 1 月の休暇日のみを取得したい、その 3 日間のみ取得したい場合、2 月の残りの日数を取得します2 月に、このクエリの書き方を教えてもらえますか。

これは私のクエリですが、間違っています

select ((month(tdate )) - (day(fdate ))) as no_of_days,month(fdate )as month 
from leavedepot  
4

4 に答える 4

4

次のことを試していただけますか?を使用しDateDiff()ます。

select datediff(day, startdate, enddate) as no_of_days,
month(fdate )as month 
from leavedepot;

編集:SQLFIDDLEデモ

サンプルデータ:

ID  STARTDATE   ENDDATE
1   2012-01-28  2012-02-02
2   2012-02-03  2012-02-10

クエリ:

    SELECT month(startdate) as Month_Number,
    datename(month, startdate) as Month, -- month is a reserved word
    case when month(startdate) <> month(enddate)
    then datediff(day, startdate, DATEADD(month, 
               ((YEAR(startdate) - 1900) * 12)
               + MONTH(startdate), -1)) 
    else datediff(day, startdate, enddate)
    end
    as Leaves
    from myleaves
    ;

結果:

MONTH_NUMBER    MONTH       LEAVES
1               January     3
2               February    7

万が一週末を除外したい場合は...:ここでは変数を使用して開始終了日を定義しますが、独自のテーブル列を使用することもできます。:)参照投稿:SQLServerを使用して週末を除くDATEDIFFを取得します。このクエリを上記に組み込む必要があります。

declare @d1 datetime, @d2 datetime
select @d1 = '9/9/2011',  @d2 = '9/18/2011'

select datediff(dd, @d1, @d2) - (datediff(wk, @d1, @d2) * 2) -
       case when datepart(dw, @d1) = 1 then 1 else 0 end +
      case when datepart(dw, @d2) = 1 then 1 else 0 end;

2開始日と終了日を除外するために、日を削除することもできます... datepartを使用する関数。

于 2013-01-03T11:23:35.513 に答える
1

土曜日と日曜日を考慮せずに (変数を列名に置き換えてください);

declare @fdate datetime = '20130128'
declare @tdate datetime = '20130202'

Select case  
         when datepart(mm,@fdate) = datepart(mm,@tdate) --check if same month
         then datediff(day,@fdate, @tdate) 
         else datediff(day,@fdate, 
            convert(varchar(4),datepart(yy,@fdate)) + 
            right('0' + convert(varchar(2), datepart(mm,@fdate)+1),2) + '01') - 1 
         end
AS leavesOfMonth
于 2013-01-03T11:30:19.420 に答える
0

このコードは、fdateからその月の終わりまでの日数を示します。

select 
datediff(dd,fdate,
dateadd(dd, -1, dateadd(mm,1,cast
(cast(datepart(yy,fdate) as varchar) + '-' + 
cast(datepart(mm,fdate) as varchar) + '-01'
as datetime
))))
from dbo.TST

TSTは、日付を含む構造の表です

于 2013-01-03T11:27:06.973 に答える
0

これにより、今月の最終日が表示されるため、簡単に達成できます

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))

同様に、2月の計算中に、翌月の当月の最初の日を取得できます。

前月の最終日

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
于 2013-01-03T11:18:42.543 に答える