SQL query, BETWEEN. Windows forms. Запрос

212
06 января 2018, 00:05

Не работает SQL запрос с BETWEEN. Необходимо создавать отчет с данными о пациентах за период времени, заданный пользователем. Диапазон дат задается с помощью 2-х DateTimePicker. Ошибка именно в запросе. Подскажите где косяк?!До этого создавал отчеты с запросами за конкретный год или месяц - все работает на ура, а с этим совсем ничего не выходит.

if (radioButton3.Checked)
{
    DateTime d = Convert.ToDateTime(dateTimePicker3.Text);
    diap1 = Convert.ToInt32(d.Day);
    Mes = Convert.ToInt32(d.Month);
    God = Convert.ToInt32(d.Year);
    DateTime f = Convert.ToDateTime(dateTimePicker4.Text);
    diap2 = Convert.ToInt32(f.Day);
    Mes = Convert.ToInt32(f.Month);
    God = Convert.ToInt32(f.Year);
    MSEvsego = 0;
    sql = "Select count (*)  From First_Journal Where Date_Eks BETWEEN Day(Date_Eks)=@StartDay and Day(Dete_Eks)=@EndDay";
    connection = new SqlConnection(Properties.Settings.Default.ConnectionString);
    command = new SqlCommand(sql, connection);
    command.Parameters.Add("@StartDay", SqlDbType.Int);
    command.Parameters["@StartDay"].Value = diap1;
    command.Parameters.Add("@EndDay", SqlDbType.Int);
    command.Parameters["@EndDay"].Value = diap2;
    command.Parameters.Add("@month", SqlDbType.Int);
    command.Parameters["@month"].Value = Mes;
    command.Parameters.Add("@year", SqlDbType.Int);
    command.Parameters["@year"].Value = God;
    try
    {
        connection.Open();
        MSEvsego += Convert.ToInt32(command.ExecuteScalar());
        connection.Close();
    }
    catch
    {
    }
Answer 1

Оператор BETWEEN имеет следующий синтаксис:

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

Обратите внимание, Аргумент test_expression должен быть того же типа данных, что и аргументы begin_expression и end_expression.

Вы же пишете:

Date_Eks BETWEEN Day(Date_Eks)=@StartDay and Day(Dete_Eks)=@EndDay

У вас получается Date_Eks - типа Date, а выражения Day(Date_Eks)=@StartDay и Day(Dete_Eks)=@EndDay типа Boolean. Это, естественно, не работает.

Подозреваю, что вам нужно что-то вроде:

Date_Eks BETWEEN @StartDay and @EndDay

но тип @StartDay и @EndDay должен быть тоже Date

или:

Day(Date_Eks) BETWEEN @StartDay and @EndDay

но это вообще выглядит плохо

READ ALSO
Как начать учить angular [требует правки]

Как начать учить angular [требует правки]

Хочу начать учить Ангуляр, вот только много видеоуроков на ютубе уже устарели, ангуляров уже 5 вроде, а во всяких ответах на Тостере пишут,...

238
Не работает расширение

Не работает расширение

С первого сайта я парсю ссылку, на втором пытаюсь вывести её в консоль ( для проверки работоспособности хранилища)Собственно весь код, в манифесте...

233
Как изменить механизм формы опроса?

Как изменить механизм формы опроса?

Есть следующая форма опросаКак с помощью javascript сделать, чтобы при выборе/клике нужного ответа срабатывала кнопка "ответить" без ее нажатия?

307