Два параметра даты в функции SQL - PullRequest
0 голосов
/ 16 марта 2011

У меня есть такая страница

enter image description here

В моем SQL я хочу вычислить некоторое значение между этими днями

И это мой код;

strQuery = @"SELECT  B.HESAP_NO, A.TEKLIF_NO1 + '/' + A.TEKLIF_NO2 AS 'TEKLIF',
B.MUS_K_ISIM, CONVERT(VARCHAR(10),A.ISL_TAR,103) AS 'TARIH',
SUM(ISNULL(CAST(A.ODENEN_ANAPARA AS FLOAT),0)+ISNULL(CAST(A.FAIZ AS FLOAT),0)+
      ISNULL(CAST(A.BSMV AS FLOAT),0)+ISNULL(CAST(A.GECIKME_FAIZ AS FLOAT),0)+
      ISNULL(CAST(A.GECIKME_BSMV AS FLOAT),0)) AS 'YATAN', 
      (CASE WHEN B.DOVIZ_KOD = 21 THEN 'EUR' WHEN B.DOVIZ_KOD = 2 THEN 'USD' WHEN B.DOVIZ_KOD = 1 THEN 'TL' END) AS 'KUR',
      D.AVUKAT, 
     (CASE WHEN D.HESAP IN (SELECT T_HESAP_NO FROM TAKIP) THEN 
     (SELECT ICRA_TAR FROM TAKIP WHERE T_HESAP_NO = D.HESAP)
     ELSE ' ' END) AS 'ICRA TARİHİ', 
     (CASE WHEN D.HESAP IN (SELECT T_HESAP_NO FROM TAKIP) THEN 
     (SELECT HACIZ_TAR FROM TAKIP WHERE T_HESAP_NO = D.HESAP)
     ELSE '' END) AS 'HACİZ TARİHİ'
FROM YAZ..MARDATA.BIR_TAHSIL A, YAZ..MARDATA.S_TEKLIF B, AVUKAT D
WHERE A.TEKLIF_NO1 = B.TEKLIF_NO1
AND A.TEKLIF_NO2 = B.TEKLIF_NO2
AND B.HESAP_NO = D.HESAP
AND A.HESAP_NO = D.HESAP ";


    if (txtBoxText1 != "")
    {
        strQuery = strQuery + " AND A.ISL_TAR >= @S_TARIH_B";

      dt_stb = DateTime.Parse(txtBoxText1);
      myCommand.Parameters.AddWithValue("@S_TARIH_B", dt_stb);
    }

    if (txtBoxText2 != "")
    {
        strQuery = strQuery + " AND A.ISL_TAR <= @S_TARIH_S";
      dt_sts = DateTime.Parse(txtBoxText2);
      myCommand.Parameters.AddWithValue("@S_TARIH_S", dt_sts);
    }

    strQuery = strQuery + " GROUP BY B.HESAP_NO, A.TEKLIF_NO1 + '/' + A.TEKLIF_NO2,A.ISL_TAR,B.DOVIZ_KOD ,B.MUS_K_ISIM, D.AVUKAT, D.HESAP";

И это мой Function;

ALTER FUNCTION [dbo].[fngcodeme]
(
    @HESAP INT,@BAS DATE, @BIT DATE,@DOV INT
)
RETURNS FLOAT

AS
BEGIN

RETURN( 
    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 ISL_TAR >= @BAS 
    AND ISL_TAR <= @BIT
)
END

То, что я хочу получить значение в этом коде с помощью этой функции.

@BAS это ПускДата, @BIT - Дата окончания

Как я могу связать @BAS with Textbox1 и @BIT with Textbox2?

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Вы уже сделали подобное с вашим кодом.

strQuery = @"SELECT  fngcodeme(@HESAP, @BAS, @BIT, @DOV)";

dt_stb = DateTime.Parse(txtBoxText1);
myCommand.Parameters.AddWithValue("@BAS", dt_stb);
dt_sts = DateTime.Parse(txtBoxText2);
myCommand.Parameters.AddWithValue("@BIT", dt_sts)

// do it for @Hesap and @Dov
0 голосов
/ 16 марта 2011

Используйте форму, не зависящую от языка, чтобы указать дату для параметра команды, поскольку она будет работать независимо от языка пользователя входа в систему. Ниже приведен список форматов, не зависящих от языка, для указания параметра даты.

Для DATETIME используйте: «ГГГГММДД чч: мм: сс.ннн», «ГГГГ-ММ-ДД Чт: мм: сс.ннн», «ГГГГММДД» Для SMALLDATETIME используйте: «ГГГГММДД чч: мм», «ГГГГ-ММ-ДД Чт: мм», «ГГГГММДД» Для DATE используйте «ГГГГММДД», «ГГГГ-ММ-ДД»

DateTime.Parse зависит от текущей культуры, и текущая культура может по-разному анализировать вашу строку в TextBox, поэтому использование формы, не зависящей от языка, будет лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...