문제

날짜에 따라 데이터베이스에서 값을 필터링하고 싶습니다.

데이터베이스의 날짜에는 다음과 같은 값이 포함되어 있습니다. 2008-12-28 18:00:00. 그리고 내 수업에는 필터링하려는 DateTime 변수가 있습니다. 이상적으로는 다음과 같이 작동합니다.myBindingSource.Filter = "DATE(myDateField) = myDateTime.Date" + 필요에 따라 myDateTime.Date 형식 조정.

그러나 평가는 다음과 같습니다. "표현식에는 정의되지 않은 함수 호출 날짜 ()가 포함되어 있습니다."

SQL 문을 직접 실행하면 필터에서 날짜 () 함수를 사용할 수 있습니다.

추신 나는 커넥터/net 5.2와 함께 mysql db를 사용합니다.

이 문제를 어떻게 해결할 수 있습니까?

제안해 주셔서 감사합니다.

도움이 되었습니까?

해결책

getSqldate 함수가 필요하지 않습니다. string.format ()를 사용하여 형식 날짜 :

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

또는

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

다음과 같이 바인딩 소스를 필터링 할 수 있습니다.

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

다른 팁

Tom H. 감사합니다.

그렇습니다. 필터에서 DateTime의 시간 부분을 제거하고 제안이 완벽하게 작동합니다.

나는 다른 사람들을위한 완전한 해결책을 남길 것입니다.

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

getsqldate 함수는 다음과 같습니다.

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";
}

답변에 대한 수정 : 가입 MSDN, 올바른 날짜를 얻으려면 mm 안에

yyyy-mm-dd

그렇게 자본화되어야합니다.

yyyy-MM-dd

올바르게 형식화 된 날짜를 얻으려면.

MyDatefield는 데이터 세트의 필드 이름입니까? 나는 당신이 다음과 같은 표현을 원한다고 생각합니다.

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

필터에서 DateTime의 시간 부분을 제거하는 방법을 묻고 있습니까? 나는 MySQL에 너무 익숙하지 않지만 DateTime의 날짜 부분을 반환하는 모든 종류의 함수를 사용하면 쿼리 (기존 또는 미래 색인)에 해당 열에서 인덱스를 사용할 가능성이 사라질 수 있습니다.

가장 좋은 방법은 주어진 필터 날짜에만 해당 범위를 점검하는 프론트 엔드에 필터를 만드는 것입니다. 예를 들어:

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>

정확한 코드가 없어서 죄송하지만 SQL 개발자이며 VB/C# 기술 부족은 기능을 생각해 내기 위해 더 많은 시간을 할애해야합니다. 그러면 아마도 당신을 데려 갈 것입니다. :)

DataGridView의 두 날짜 사이의 검색은이 코드를 사용할 수 있습니다.

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

BindingSource1 : BindingSource1의 DataGridView DataSourc로드. F5 : DataGridView에서 헤더 열의 이름. MaskedTextbox1 : 첫 데이트를 위해. MaskedTextbox2 : 두 번째 날짜를 얻으십시오.

"ARN_7"

For search between two date in DataGridView you can use this code :

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 .
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top