我想兩個日期之間選擇的數據之間,沒有一天SQL Server 2008中選擇數據只月份和年份
輸入例如:
起始月份:9,開始年度:2011
月末: 3,結束年份:2012
我認爲有兩種方法可以做到這一點。
第一個是轉換開始月份和開始年份,如2011-09-01
,並將最後日期轉換爲2012-03-31
,但這需要計算結束月份的最後一天。獲得了這些數據,我們可以使用的WHERE子句的BEETWEN功能(但是,是轉換功能可靠嗎?)
第二種解決方案是在下面的代碼使用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)<[email protected] and
DATEPART(MM,d.DataDelega)>[email protected] and
DATEPART(YYYY,d.DataDelega)[email protected] 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)>[email protected]
)
OR
( -- delega limite destro
DATEPART(YYYY,d.DataDelega)[email protected] AND
DATEPART(MM,d.DataDelega)<[email protected]
)
OR
( -- delega limite sinistro
DATEPART(YYYY,d.DataDelega)[email protected] AND
DATEPART(MM,d.DataDelega)>[email protected]
)
)
)
GO
起初,我以爲最終的GO是爲我們:「這裏的是,現在的問題... GO!」 :) –