2011-03-17 67 views
0

我有这样一个Function;在SQL中使用Date.Now函数

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,IF @BAS日期的月份值等于DateTime.Now.Month价值,我想用M_GHAREKET表,否则使用M_HAREKET表。

我该如何改变这个功能?

是否有可能像在SQL FunctionDateTime.Now.Month这IF条款?

或者我应该在我的ASP.NET页面使用?我怎样才能做到这一点?

回答

2

您可以使用monthyear

declare @BAS datetime 
set @BAS = '2011-03-15' 

if month(getdate()) = month(@BAS) and 
    year(getdate()) = year(@BAS) 
+0

你是绝对是正确的!谢谢.. – 2011-03-17 09:26:58

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