2011-03-17 64 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