Отфильтруйте значения по дате и выпадающему списку Vb.Net Mysql

#mysql #sql

Вопрос:

Я хотел бы отфильтровать значения между датами и значением из выпадающего списка, я пробовал:

 adapter.SelectCommand = New MySqlCommand("SELECT * FROM loins LIKE date(dateprocessed) between '" amp; DateTimePicker1.Value.ToString("yyyy-MM-dd") amp; "' and '" amp; DateTimePicker2.Value.ToString("yyyy-MM-dd") amp; "' WHERE projectcode= '" amp; ComboBox1.Text amp; "' ORDER BY code ASC", conn.getConnection)
 

И выдает ошибку:

 Additional information: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIKE date(dateprocessed) between '2021-09-20' and '2021-09-25' WHERE projectcode' at line 1
 

Комментарии:

1. Попробуйте с » где «вместо » нравится»

2. WHERE Предложение должно содержать ВСЕ условия фильтра, а не только то, которое относится к текстовому столбцу. LIKE используется только для сравнения текста со значением, содержащим подстановочные знаки.

3. Кроме того, не создавайте SQL-код, используя подобную конкатенацию строк. ВСЕГДА используйте параметры для вставки значений в SQL.

4. Вам действительно просто нужно сказать вслух, что вы хотите сделать, и это подскажет вам, как написать код. Вам нужны записи, в которых дата находится между этими двумя значениями, а текстовый столбец равен определенному значению. Просто напишите SQL, который это делает.

5. Этот вопрос касается SQL, а не VB.NET, поэтому я соответствующим образом отредактировал теги. Тот факт, что вы используете VB.NET создание кода SQL не имеет значения, потому что SQL был бы неправильным по той же причине, независимо от того, какой язык приложения вы использовали.

Ответ №1:

Как упоминалось в комментариях под вопросом, все, что вам нужно сделать, это заменить «нравится» на «где». Просто хочу добавить некоторую оптимизацию в запрос :

  • Добавьте индекс в столбец «обработанные данные» (отлично, если вы уже сделали это). Это позволит быстро выполнять ваши запросы, даже когда ваши данные вырастут до миллионов.
  • Не приводите поле «Дата-время» к «дате» (например, » дата(обработанная дата)») для сравнения. При этом возникает много нежелательных побочных эффектов.
  1. Прежде всего, это то, что, когда вы приведете свое поле даты и времени в соответствие с датой, ваши запросы не будут использовать индекс и по мере роста данных начнут занимать очень много времени для завершения запроса. В моем случае запрос данных за последние 2 дня (~ 30 000 строк) из 70 миллионов строк для некоторых сложных запросов занял 46 минут с приведением даты(столбца) и 6 секунд без этого.
  2. Как следует из вышесказанного, кастинг может даже не служить какой-либо цели и снова может привести к некоторым ошибкам.
    • Дата и время «2021-09-25 10:21:30» приходится на промежуток между «2021-09-25» и «2021-09-26», даже без указания даты, как и все остальные даты между этими датами.
    • Дата и время «2021-09-26 11:16:24» будут включены в ваши результаты, даже если вы запрашиваете результаты между «2021-09-25» и «2021-09-26». Это может быть что-то, что вы хотите, или что-то нежелательное, в зависимости от ваших требований. Если вы хотите включить его, просто сделайте свой запрос с «2021-09-25» на «2021-09-27».