Использование Date.Now в функции SQL - PullRequest
0 голосов
/ 17 марта 2011

У меня есть 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, если значение месяца IF @BAS для даты равно DateTime.Now.Month значение, которое я хочу использовать M_GHAREKET таблицу, иначе использовать M_HAREKET таблицу.

Как мне изменить эту функцию?

Возможно ли подобное предложение IF с DateTime.Now.Month в SQL Function?

Или я должен использовать на своей ASP.NET странице? Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Вы можете использовать месяц и год .

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

if month(getdate()) = month(@BAS) and
   year(getdate()) = year(@BAS)
1 голос
/ 17 марта 2011

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...