vb.net с mysql, как выбирать между датами разных лет?
У меня есть программа vb.net, которая запрашивает базу данных MySQL. я могу искать и получать записи между датами с этим кодом:
sqlQRY12 = "SELECT * from mating WHERE date BETWEEN '" & export_daily_date_DateTimePicker1.Text & "' AND '" & export_daily_date_DateTimePicker2.Text & "' AND chkbox = '0' ORDER BY lot_id ASC"
мой формат для моей даты:
export_daily_date_DateTimePicker1.Format = DateTimePickerFormat.Custom
export_daily_date_DateTimePicker1.CustomFormat = "MM/dd/yy"
export_daily_date_DateTimePicker2.Format = DateTimePickerFormat.Custom
export_daily_date_DateTimePicker2.CustomFormat = "MM/dd/yy"
однако, если я попытаюсь выполнить поиск между двумя годами, например, 20.12.13 - 20.02.14, я не верну никаких записей, когда узнаю, что они существуют? Любая помощь будет отличной
2 ответа
Обычно даты, выраженные в виде строк в запросах к базе данных, должны иметь формат "ГГГГ-ММ-ДД".
По сути, вы хотите, чтобы ваш выполненный запрос был таким:
SELECT * from mating
WHERE date BETWEEN '2013-12-20' AND '2014-02-20'
Поэтому измените формат ваших dtpickers на yyyy-mm-dd следующим образом:
export_daily_date_DateTimePicker1.Format = DateTimePickerFormat.Custom
export_daily_date_DateTimePicker1.CustomFormat = "yyyy-MM-dd"
export_daily_date_DateTimePicker2.Format = DateTimePickerFormat.Custom
export_daily_date_DateTimePicker2.CustomFormat = "yyyy-MM-dd"
Вы никогда не должны объединять значения в ваши команды SQL. Если это вообще возможно, вы должны использовать параметры. С помощью параметров вы можете указать значение как фактический тип (Date
), а не как строковое представление. Поставщик ADO будет обрабатывать преобразование значения правильно для вас.
cmd.CommandText = "SELECT * from mating WHERE date BETWEEN @date1 AND @date2 AND chkbox = '0' ORDER BY lot_id ASC"
cmd.Parameters.AddWithValue("@date1", export_daily_date_DateTimePicker2.Value)
cmd.Parameters.AddWithValue("@date2", export_daily_date_DateTimePicker2.Value)