#c# #mysql #date
#c# #mysql #Дата
Вопрос:
Я хотел бы обратиться за помощью, потому что по какой-то причине предложение SQL с BETWEEN у меня не работает — я получаю 0 результатов.
При вставке записи я сохраняю дату следующим образом:
..
commandObject.Parameters.Add("date", c.Found.Date);
Проблема у меня в том, что это никогда не работает:
commandObject.Parameters.Add("from", dateTimePicker_FROM.Value.Date.ToShortDateString());
commandObject.Parameters.Add("to", dateTimePicker_TO.Value.Date.ToShortDateString());
commandObject.CommandText = "Select * from Persons WHERE Date BETWEEN @from AND @to";
Другие выбирает и т.д. работает просто отлично.
Комментарии:
1. Можете ли вы показать нам результат
c.Date.ToShortDateString()
?2. не могли бы вы объяснить
doesn't work
точнее? и предоставить некоторые примеры данных? мое первое слепое предположение, однако, исходит изToShortDateString
— зачем работать со строками вместо datetimes в вашей базе данных? у них разное поведение при сравнении, и вы обычно хотите дату и время.3. @TimBiegeleisen При отладке это сохраняется в параметре: {1/19/2021 12:00:00 утра}
4. используйте это ПРЕОБРАЗОВАНИЕ (datetime, @from)
5. В MySQL даты должны быть ‘y-m-d’, а время даты должно быть ‘y-m-d h: i: s’
Ответ №1:
При использовании условия BETWEEN в MySQL с датами обязательно используйте функцию ПРИВЕДЕНИЯ для явного преобразования значений в даты.
Следующий пример даты использует условие BETWEEN для извлечения значений в диапазоне дат:
ВЫБЕРИТЕ * ИЗ example_tbl, ГДЕ order_date МЕЖДУ ПРИВЕДЕНИЕМ (‘2021-01-19’ В КАЧЕСТВЕ ДАТЫ) И ПРИВЕДЕНИЕМ (‘2021-01-20’ В КАЧЕСТВЕ ДАТЫ);
дополнительная информация по адресу: https://www.techonthenet.com/mysql/between.php
Комментарии:
1. Спасибо, синтаксис сработал, но я все равно получаю 0 результатов: (
2. Вам не нужно это приведение; MySQL понимает строки в формате ‘гггг-ММ-дд’ как даты
Ответ №2:
Вы хотите передавать свои даты как даты, а не строки:
commandObject.Parameters.Add("from", dateTimePicker_FROM.Value.Date);
Ответ №3:
Я не совсем уверен, почему вы, кажется, сохраняете дату (и задаете параметр даты), но когда вы выполняете поиск, вы используете строки вместо дат
Вы сказали:
commandObject.Parameters.Add("date", c.Found.Date);
Это кажется шатким; Я не помню перегрузки Add, которая принимает строку и значение (при условии, что вы используете соединитель MySQL) — вы имели в виду AddWithValue ?
Я предполагаю, что:
- вы хотели сказать AddWithValue
- ваш запрос выглядит как `ВСТАВИТЬ В ЗНАЧЕНИЯ T (…, @date, …)
- ваш параметр «date» используется для столбца, в котором хранятся дата, дата-время или отметка времени
- c.Found — это c # datetime, и вы используете свойство Date, чтобы установить время на полночь
Предположим, что c.Found есть 2020-01-02 12:34:56
, это означает, что ваша таблица должна заканчиваться 2020-01-02 00:00:00
Теперь установите для ваших средств выбора значения 2020-01-01 и 2020-01-03
Запустите поиск следующим образом:
SELECT * FROM t WHERE date BETWEEN @f AND @t
Задайте свои параметры следующим образом:
commandObject.Parameters.AddWithValue("@f", fromPicker.Value.Date);
commandObject.Parameters.AddWithValue("@f", toPicker.Value.Date);
Т.е. сделайте их датами, а не строками
И это будет работать
Значение BETWEEN включено на обоих концах диапазона, поэтому средство выбора from или средство выбора to может быть 2020-01-02, и оно все равно будет отображаться. Считайте, что даты похожи на целые числа, а времена — на десятичные дроби. 2020-01-02 00:00:00 похоже на 2.0, 2020-01-02 18:00:00 похоже на 2.75, 2020-01-03 00: 00:00 похоже на 3.0. Это означает, что МЕЖДУ 2020-01-02 И 2020-01-03 будет получать что-либо с полуночи в эти даты, и все между ними, как МЕЖДУ 2 И 3, даст вамстроки с 2, 2.5, 3… но это не даст вам 3.5, и точно так же это не даст вам 2020-01-03 12:00:00, если между заканчивается на 2020-01-03
Комментарии:
1. Спасибо, я использую встроенную базу данных sqldatabase, и единственным методом добавления пары параметров является Add . Нет метода AddWithValue .
2. Тогда вы можете просто настроить совет на использование Add .. Или опубликуйте дополнительную информацию о том, что именно вы используете. Единственная подсказка, которую вы даете, — это тег «mysql», поэтому я выбрал совет MySQL