0

MySQL データベースから日付を取得するアプリケーションがあります (文字列形式: 01-jan-2000)。このデータを TextBox に入力された日付と比較する必要があります。

これは私がこれまでに持っているものです:

String query = "select * from tb_demographic_data where date_of_birth LIKE '%" +
       txb_startDate.Text + "' OR (str_to_date(date_of_birth,'%d,%b,%Y') <= 
       str_to_date('"+txb_startDate.Text+"','%d,%b,%Y'))

クエリを実行しても結果が得られません。私のSQLコードに問題はありません。で文字列を日付に変更するとエラーが発生すると思いますstr_to_date()。誰でも助けることができますか?

4

4 に答える 4

1

日付の文字列比較を行わないでください。データベースの列を日付に変更し、パラメーター化されたステートメントなどを使用して日付値を受け入れるようにクエリを更新します。

于 2012-08-16T15:11:46.650 に答える
0

私はそれを考え出した。これが最も効率的な方法ではないと確信していますが、私はこれにかなり慣れていません。ここにあります: 2 つの文字列を日付として解析し、それらの日付の差を計算しました。答えが肯定の場合、最初の日付が 2 番目の日付よりも前になり、その逆も同様です。

select * from tb_demographic_data 
where date_of_birth 
    LIKE '%" + txb_startDate.Text + "' 
    OR (datediff(str_to_date('" + txb_startDate.Text + "', 
                             '%d-%b-%Y'), 
                 str_to_date(date_of_birth,
                             '%d-%b-%Y'))>=0) 
于 2012-08-17T17:46:28.677 に答える
0

日付の形式が間違っているようです...'%d,%b,%Y'区切り記号がコンマであると言っています。のようなものが欲しいと思います'%d-%b-%Y'

于 2012-08-16T14:30:28.400 に答える
0

Nikhil が指摘したように、ユーザーに日付/カレンダー/時計コントロールに日付を入力させることは、通常、はるかに優れた選択です。さらに、テキスト ボックスからユーザー入力を取得せず、単純に SQL 文字列内に貼り付けることを強くお勧めします。これはSQL インジェクションにつながります。

上記の推奨コントロールのいずれかを使用してユーザーに特定の を指定させるDateTimeか、テキスト ボックスのデータをオブジェクトに変換するDateTimeことをお勧めします。DbCommandオブジェクトを使用してクエリを実行していると仮定すると、パラメータ化されたクエリを使用DateTimeして、コマンドに直接入力するのではなく、パラメータとして渡すことができます。SQL は次のようになります。

select * from tb_demographic_data
where date_of_birth <= @startDate

次に、オブジェクトの a とaを使用して aDbParameterを yourに追加する必要があります。DbCommandParameterName"@startDate"ValueDateTime

于 2012-08-16T15:31:23.643 に答える