Sql 查找特定月份的记录

Sql 查找特定月份的记录,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我创建的存储过程有4个输入参数2*ID,年份和月份,它们在WHERE子句中使用 问题是我似乎无法编写正确的语法来获取某个特定月份某个时段的值Koeficient ALTER PROCEDURE [dbo].[obrPla_DohvatiPojedineRadniciKoeficientZaObracun] ( @IDFirma INT, @IDRadnik INT, @Godina SMALLINT, @Mjesec TINYINT ) AS BEGIN

我创建的存储过程有4个输入参数2*ID,年份和月份,它们在WHERE子句中使用

问题是我似乎无法编写正确的语法来获取某个特定月份某个时段的值Koeficient

ALTER PROCEDURE [dbo].[obrPla_DohvatiPojedineRadniciKoeficientZaObracun]    
(
    @IDFirma INT,
    @IDRadnik INT, 
    @Godina SMALLINT,
    @Mjesec TINYINT
)
AS BEGIN

    SELECT rk.Koeficient       
    FROM RadniciKoeficient rk   
    WHERE rk.IDFirma = @IDFirma
        AND rk.IDRadnik = @IDRadnik
        AND DATEPART(yyyy, rk.DatumOd) = @Godina
        AND CASE WHEN rk.DatumDo IS NOT NULL
                THEN DATEPART(mm, rk.DatumOd) <= @Mjesec AND @Mjesec <= DATEPART(mm, rk.DatumDo)
                ELSE DATEPART(mm, rk.DatumOd) <= @Mjesec
            END

END
就我个人而言

我建议您删除参数@Godina和@Mesec,只使用单个参数,如@Time

然后不用检查年份和月份。。。因为你正在寻找这两个日期之间的价值

DATEPART(yyyy, rk.DatumOd) = @Godina and 
    case when rk.DatumDo is not null then
        (DATEPART(mm, rk.DatumOd) <= @Mjesec and @Mjesec <= DATEPART(mm, rk.DatumDo))
        else (DATEPART(mm, rk.DatumOd) <= @Mjesec)
    end  

除非你把事情说清楚了,否则你不能指望别人帮你,是吗?你准备好了什么查询了吗?你能举个例子说明输出应该是什么输出应该是十进制数吗。我附上了一张桌子的照片,请检查。日喀则问题。。。uvek sam tu da pomognem:I jos nesto,baca mi exception“Iskreno nisam siguran da mozes da ubacis case u首席执行官”附近的语法不正确。。。这是一个很好的例子。。。我在一家物流公司工作,那里有一家物流公司execute@sqlšteta,mislio sam da se case moze iskoristiti bas na taj nacin在哪里。。。啊,nema veze,ubacio sam ovaj在你的程序之间,radi kao zmaj:thx jos jednombtw。我的目标是联合国的石油运营:我在内斯托。
@Vreme between rk.DatumOd and ISNULL(rk.DatumDo, GetDate())