Pregunta

Quiero filtrar los valores de la base de datos según la fecha.

La fecha en una base de datos contiene valores como este: 2008-12-28 18:00:00. Y mi clase tiene una variable DateTime dependiendo de la que quiero filtrar. Idealmente funcionaría así: myBindingSource.Filter = " DATE (myDateField) = myDateTime.Date " + ajuste el formato de myDateTime.Date según sea necesario.

Pero lanza una EvaluateException: " La expresión contiene la función indefinida llamada DATE (). "

Aunque si ejecuto la instrucción SQL directamente, puedo usar la función DATE () en el filtro.

P.S. Yo uso MYSQL DB con el Connector / Net 5.2

¿Cómo puedo resolver este problema?

Gracias a todos por las sugerencias.

¿Fue útil?

Solución

La función getSqlDate no es necesaria. Puede usar String.Format () para formatear fechas:

String.Format("{0:yyyy-MM-dd} 00:00:00", myDateTime)

O

myDateTime.Date.ToString("yyyy-MM-dd") + " 00:00:00"

Podrías filtrar la fuente de enlace de esta manera:

myBindingSource.Filter = String.Format("myDateField >= '{0:yyyy-MM-dd}' AND myDateField < '{1:yyyy-MM-dd}'", myDateTime, myDateTime.AddDays(1));

Otros consejos

Gracias Tom H.

Sí, quería eliminar la parte del tiempo de la fecha y hora en el filtro y tu sugerencia funciona perfectamente.

Dejaré la solución completa para otros:

myBindingSource.Filter = "myDateField >= '" + getSqlDate(myDateTime) + "' AND myDateField < '" + getSqlDate(myDateTime.AddDays(1)) + "'";

donde la función getSqlDate es:

string getSqlDate(DateTime date) {
    string year = "" + date.Year;
    string month = (date.Month < 10) ? "0" + date.Month : "" + date.Month;
    string day = (date.Day < 10) ? "0" + date.Day : "" + date.Day;

    return year + "-" + month + "-" + day + " 00:00:00";
}

Una corrección a la respuesta: Acceder a msdn , para obtener la fecha correcta el mm en

yyyy-mm-dd

tendría que ser capitalizado como asi;

yyyy-MM-dd

para obtener una fecha formateada correctamente.

¿Es myDateField el nombre del campo en el conjunto de datos? Creo que quieres una expresión como esta:

myBindingSource.Filter = "myDateField = " & myDateTime.Date.ToString()

¿Está preguntando cómo eliminar la porción de tiempo de la fecha y hora en el filtro? No estoy muy familiarizado con MySQL, pero si usa cualquier tipo de función que devuelva la parte de la fecha de una fecha y hora, es probable que elimine cualquier posibilidad de usar un índice en esa columna para la consulta (índice existente o futuro).

Su mejor apuesta es crear un filtro en la parte delantera que verifique un rango que sea solo para su fecha de filtro dada. Por ejemplo:

myBindingSource.Filter = "myDateField >= " & <code to create a string representing 12AM of your date> &
" myDateField < " & <code to create a string for 12AM of the next day>

Lo siento por no tener el código exacto, pero soy un desarrollador de SQL y mi falta de habilidades de VB / C # requeriría que me tomara mucho más tiempo para crear las funciones, entonces probablemente te llevaría. :)

Para buscar entre dos fechas en DataGridView puede usar este código:

BindingSource1.Filter = "F5 >= '" + maskedTextBox1.Text + "' And " + "F5 <= '" + maskedTextBox2.Text + "'";

BindingSource1: mi datagridview datasourc load en BindingSource1. F5: nombre de su columna de encabezado en datagridview. maskedTextBox1: para obtener la primera fecha. maskedTextBox2: para obtener la segunda fecha.

Sea exitoso " Arn_7 "

Para buscar entre dos fechas en DataGridView puede usar este código:

BindingSource1.Filter = "F5 >= '" + maskedTextBox1.Text + "' And " + "F5 <= '" + maskedTextBox2.Text + "'";

BindingSource1 : my datagridview datasourc load in BindingSource1 .
F5             : name of your header column in datagridview . 
maskedTextBox1 : for get first date .
maskedTextBox2 : for get second date .
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top