我想在两个日期之间选择数据,没有日期
输入示例:
开始月份:9,开始年份:2011
结束月份:3,结束年份:2012
我认为有两种方法可以做到这一点。
第一个是将开始月份和开始年份转换为日期2011-09-01
,并将最后日期转换为2012-03-31
,但这需要计算结束月份的最后一天。获得这些日期后,我们可以对 WHERE 子句使用 BEETWEN 函数(但是,CONVERT 函数可靠吗?)
第二种解决方案是使用DATEPART
如下代码中的函数:
我试着解释一下:如果结束年份等于初始年份,那么月份必须在开始和结束月份之间;否则,如果最后几个月大于最初几年,如果与最初和最后一年不同,我会采取介于两者之间的一切;否则,如果是最后一年,月份必须小于或等于最后一个月,如果是初始年份,月份必须大于或等于最后一个月
你能帮我以最好的方式做到这一点吗?是否正确,我采用的解决方案?
declare @IndDebitoCredito bit,@ProgTributo int,@mi as integer,@ai as integer,@mf as integer,@af as integer,@IDAnagrafica varchar(5)
select @mi = 01,@ai = 2011,@mf = 12,@af = 2011,@IDAnagrafica = 'DELEL',@IndDebitoCredito = 1
select distinct rrd.IDTributo
from TBWH_Delega d
--inner join TBWH_SezioneDelega sd on d.IDDelega = sd.IDDelega
inner join TBWH_Rigo rd on rd.IDDelega = d.IDDelega
inner join TBWH_RataRigo rrd on rrd.IDRigo = rd.IDRigo
where
(
DATEPART(MM,d.DataDelega)<=@mf and
DATEPART(MM,d.DataDelega)>=@mi and
DATEPART(YYYY,d.DataDelega)=@ai and
@af = @ai
)
OR
(
--anno finale magg. anno iniziale
@af > @ai AND
(
( -- delega nell'intervallo
DATEPART(YYYY,d.DataDelega)<@af AND
DATEPART(YYYY,d.DataDelega)>@ai
-- DATEPART(MM,d.DataDelega)>=@mi
)
OR
( -- delega limite destro
DATEPART(YYYY,d.DataDelega)=@af AND
DATEPART(MM,d.DataDelega)<=@mf
)
OR
( -- delega limite sinistro
DATEPART(YYYY,d.DataDelega)=@ai AND
DATEPART(MM,d.DataDelega)>=@mi
)
)
)
去