我有Function
这样的人;
ALTER FUNCTION [dbo].[fngcodeme]
(
@HESAP INT, @DOV INT, @TEKLIF VARCHAR(10), @BAS datetime, @BIT datetime
)
RETURNS FLOAT
AS
BEGIN
DECLARE @Result FLOAT
IF CONVERT(DATETIME, @BIT,103) <= '20110228'
SET @Result = (SELECT SUM(TUTAR)
FROM YAZ..MARDATA.M_HAREKET
WHERE TEMEL_HESAP = @HESAP
AND DOVIZ_KOD = @DOV
AND REF_KOD = 'GC'
AND BACAK_GRUP = 'PERT'
AND ISL_KOD = 1
AND ACIKLAMA LIKE '%' + @TEKLIF + '%'
AND ISL_TAR >= CONVERT(DATETIME, @BAS,103)
AND ISL_TAR <= CONVERT(DATETIME, @BIT,103)
)
ELSE
SET @Result = (SELECT SUM(TUTAR)
FROM YAZ..MARDATA.M_GHAREKET
WHERE TEMEL_HESAP = @HESAP
AND DOVIZ_KOD = @DOV
AND REF_KOD = 'GC'
AND BACAK_GRUP = 'PERT'
AND ISL_KOD = 1
AND ACIKLAMA LIKE '%' + @TEKLIF + '%'
AND ISL_TAR >= CONVERT(DATETIME, @BAS,103)
AND ISL_TAR <= CONVERT(DATETIME, @BIT,103)
)
RETURN @Result
END
M_GHAREKET
表是我的月度数据表。每月结束时,此表格加载到M_HAREKET
。 (并删除了M_GHAREKET
)
M_HAREKET
是一个大问题。 M_GHAREKET
很小。 (我的意思是M_HAREKET
现在有超过500.000个数据,M_GHAREKET
超过4.000)
我想要的是这个Function
,如果@BAS日期的月份值等于DateTime.Now.Month
值我想要使用M_GHAREKET
表,否则使用M_HAREKET
表。
我应该如何更改此功能?
是否可能像DateTime.Now.Month
中的SQL Function
这个IF子句?
或者我应该在我的ASP.NET
页面中使用?我怎么能这样做?
答案 0 :(得分:2)
declare @BAS datetime
set @BAS = '2011-03-15'
if month(getdate()) = month(@BAS) and
year(getdate()) = year(@BAS)
答案 1 :(得分:1)
您可以使用DATEDIFF
查找两个月份之间的差异。这将返回超过的时间段边界数,因此在检查月份时,如果两个日期位于同一日历年和月中,则仅返回0
DECLARE @date1 DATETIME
SET @date1 = '2011-03-01'
SELECT DATEDIFF(MM, @date1, '2011-02-28') -- -1
SELECT DATEDIFF(MM, @date1, '2011-03-20') -- 0
SELECT DATEDIFF(MM, @date1, '2010-03-01') -- -12
因此,要检查日期是否与今天(GETDATE()
)相同,可以使用
DECLARE @date1 DATETIME
SET @date1 = '2011-03-01'
IF DATEDIFF(MM, @date1, GETDATE()) = 0
BEGIN
-- Do your work
END