- - PR -
Oracle日付型の検索
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-09 14:00
いつもお世話になっています。
VB.NET2003、ADO.NETで開発を行っています。 Form上のDateTimePickerとOracleの日付型を検索しています。 to_char関数で検索はできているのですが、 パフォーマンスを考えて、to_date関数に変更したいのですが、 うまくいきません。
どなたかご教授お願いします。 | ||||||||||||||||
|
投稿日時: 2006-10-09 15:22
モンジさん こんちには。
TO_DATE 関数を使用している部分が見当たりませんが、 これは記載間違いだとして WHERE 列名 = TO_DATE(日付,書式) とすればできると思います。 [ メッセージ編集済み 編集者: ダッチ 編集日時 2006-10-09 15:36 ] | ||||||||||||||||
|
投稿日時: 2006-10-09 17:14
ダッチさん、レスありがとうございます。
おっしゃるとおり、記述間違いです。 to_date関数を調べると、『文字列を日付に変換する』関数でしたが、 年月日は日付けなので、
としましたが、やはり『文字が無効です』というエラーメッセージが出てしまいます。 因みにクラスのメソッドとしてSQLをstringで引数にしていまして、 その中身は、"where 年月日 = #2006/10/04#"となっています。 | ||||||||||||||||
|
投稿日時: 2006-10-09 17:31
ダッチさんがおっしゃるとおり
>> WHERE 列名 = TO_DATE(日付,書式) とすべきだと思うのですが >> where 年月日 = #" & CDate(Me.DateTimePicker1.Text) & "# では、だめですよね まずSQLをStringの引数にしているのであればCDateは必要ないです。 また、CDateの値を#で括っているようですが、Oracleでは無用だと思います。(この記述はAccess?) 例ですが strSQL = "WHERE 年月日 = TO_DATE('" & Me.DateTimePicker1.Text & "', 'YYYY/MM/DD')" とすべきではないでしょうか? 'YYYY/MM/DD'の書式はDateTimePickerの書式とあわせる必要があります。 _________________ -------------------------------------------- HIRO's.NET VB.NETとC#のTipsを掲載しています [ メッセージ編集済み 編集者: HIRO 編集日時 2006-10-09 18:03 ] [ メッセージ編集済み 編集者: HIRO 編集日時 2006-10-09 18:04 ] | ||||||||||||||||
|
投稿日時: 2006-10-09 21:10
パフォーマンスを考えるなら「年月日」に対して関数を使ったらダメかな。
うろ覚えですが、TO_DATE('2006/10/09', 'YYYY/MM/DD') は 2006/10/09 00:00:00 になったような。。。 日付を検索したいなら between などで範囲を指定して検索したほうがいいと思います。 [ メッセージ編集済み 編集者: かるあ 編集日時 2006-10-09 21:13 ] | ||||||||||||||||
|
投稿日時: 2006-10-09 21:54
TO_DATE の『文字列を日付に変換する』を誤解されているのだと思います。 Me.DateTimePicker1.Text は文字列です。 CDate(文字列) はプログラム上の日付型に変換するものです。 SQL では CDate を使用してもただの文字列として扱われます。 そのため、SQL 上で日付型として認識させるために TO_DATE 関数があります。 "where 年月日 = #2006/10/04#" この例で言うと 「#2006/10/04#」はただの文字列として SQL が認識します。 年月日の日付型と #2006/10/04# の文字列を比較しているのでエラーが発生したのでしょう。 そこで TO_DATE 関数の出番です。 HIROさんの例で
とすれば、Me.DateTimePicker1.Text に入っている日付の文字列が SQL で日付型と認識してくれます。 認識した結果 「2006/10/04」の文字列が かるあさんのおっしゃるとおり
となります。 最終的には WHERE 日付型の年月日 = 日付型の 2006/10/09 00:00:00 として比較され SQL は年月日が「2006/10/09 00:00:00」のを検索するようになります。 | ||||||||||||||||
|
投稿日時: 2006-10-16 12:28
ダッチさん、かるあさん、HIROさん
返事が遅れまして、大変申し訳ありません。 先週からずっとなのですが、明日までエラーコードを実行できる環境にありませんので、18日に再度報告させていただきます。取り急ぎご連絡まで。 ダッチさん、丁寧なご解説ありがとうございました。CDateとTo_Dateの違い・使い方が非常によくわかりました。 かるあさん、To_Dateを使用した場合、時刻まで注意しなければならないというご指摘ありがとうございます。18日に実際DBに入っているデータを見て、00:00:00以外があれば、betweenでの処理にTryしてみます。 HIROさん、#で囲むご指摘ありがとうございます。私は昨年までずっとaccessを使っていまして、今もプログラミングこそVB.NETで行っておりますが、簡単なPGMのDBにはaccessを使用しておりまして、大変勉強になりました。 | ||||||||||||||||
|
投稿日時: 2006-10-23 10:09
皆様、返事が遅くなりまして申し訳ございません。
無事解決いたしました。 実データは00:00:00以外の時刻もありましたので、 betweenで対応しました。 |
1