Как написать SQL-запрос для возврата всех «исторических записей» за СЕГОДНЯ ДАТУ (месяц и день) за КАЖДЫЙ ГОД в БД? - PullRequest
0 голосов
/ 28 мая 2019

Я использую Visual Studio, C # и SQL Server уже 8 месяцев и создал очень функциональный личный проект, который я изучал. Но в моей программе есть одна функциональность, которую я не могу заставить работать - автоматически, то есть.

Если я вписываю ЭТО в событие нажатия кнопки, запускаю программу и нажимаю кнопку «История», она работает отлично. Все семь столбцов информации идеально подходят для представления данных.

SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM AllConcertList WHERE Date LIKE '%%%%-05-27' ORDER BY DATE DESC; ", conn);

Однако, что не удивительно, так это то, что я хочу написать запрос, чтобы я мог нажать кнопку («История»), которая будет возвращать информацию от 27 МАЯ (или какова бы ни была сегодняшняя дата) КАЖДОГО ГОДА, и я просто не могу понять, как это сделать. Это список "Произошло в этот день в истории".

Очевидно, мне нужно сохранить SELECT * FROM AllConcertList WHERE Date ... Каким-то образом мне нужно включить GETDATE (), иначе как программа узнает, что она начинается с 05-27? Но потом я чувствую, что мне нужно включить DATEFROMPARTS, потому что я действительно хочу, чтобы месяц и день были статичными по отношению к какой-либо фактической дате (сегодня). Это должно быть как-то подзапрос.

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Вы должны быть в состоянии использовать простые функции month () и day () в зависимости от значения GETDATE () системы.Это то, что вы ищете?

select 
      ACL.* 
   from 
      AllConcertList ACL
   where 
          month( ACL.Date ) = month( getdate()) 
      and day( ACL.Date ) = day( getdate())
   order by
      ACL.Date desc

Нет параметров, нет sql-инъекций

0 голосов
/ 28 мая 2019

Вы можете динамически получить сегодняшний месяц и дату, а затем построить строку запроса.

DateTime today = DateTime.Today;
String sql = String.Format("SELECT * FROM AllConcertList WHERE Date LIKE '%%%%-{0}' ORDER BY DATE DESC;", today.ToString("MM-dd"));
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);

И чтобы показать лучшие практики, тот же запрос, но параметризованный.

DateTime today = DateTime.Today;
SqlCommand cmd =  new SqlCommand("SELECT * FROM AllConcertList WHERE Date LIKE @monthDate ORDER BY DATE DESC;", conn);
cmd.Parameters.AddWithValue("@monthDate", "%%%%-" + today.ToString("MM-dd"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...