• 締切済み

あいまい検索 続

1月から12月 空白を含む検索で前回教えていただいた者です。アクセスでLike [条件] & "*" or is null and [条件] is nullで検索条件を空白にすると すべて1から12月と空白が検査できました。しかし、1月のみ10月11月12月もでてしまいます。1を指定したとき1月のみでる方法がございましたら教え下さい。お願いします。

みんなの回答

  • 5qoo
  • ベストアンサー率48% (20/41)
回答No.5

>Like [条件] & "*" 原因はこれではないでしょうか? これだと、1月の場合は"1*"となり"1"と1の後ろに何か入力された値= "1月、10月、11月、12月"がもちろん抽出対象になります。 抽出をBetween関数を使って開始と終了の期間を指定すればどうでしょう。

bokujyou
質問者

お礼

ありがとうございます。たしかにBETWEENだとエラーはないと思います。しかし、コンボでワンクリックが好みで難しいですね

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

対象フィールドには1月1日、10月2日というような文字列が入っており 条件には月の数字部分だけを入れるということを徹底すれば Like [条件] & "月*" or is null and [条件] is null

bokujyou
質問者

お礼

書式を変換して試します ありがとうございました。

noname#22222
noname#22222
回答No.3

s_husky です。回答にミスがありましたので訂正! [イミディエイトウィンドウ] ? DBLookup("SELECT ID, 月 FROM テーブル1 WHERE 月 LIKE '[1]*' or 月 is null") 1;1月;4; はミス!10、11、12もヒットします。 [イミディエイトウィンドウ] ? DBLookup("SELECT ID, 月 FROM テーブル1 WHERE 月 LIKE '1*' or 月 is null") 1;1月;4; が正解。

bokujyou
質問者

お礼

むづかしくてまだ試していませんが、勉強してやってみます

noname#22222
noname#22222
回答No.2

やっと、失敗の原因が判りましたので回答します。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ その前に、Access では[イミディエイトウィンドウ] が提供されています。 これを利用すれば、SQL 文を簡単にテストすることが可能です。 クエリですと、少々、確認に手間隙がかかりますのでテスト環境の利用も併用されたらどうでしょうか? <テーブル1> ID  月 1   1月 2   2月 3   3月 4 5   5月 というテーブルがあった場合、 [イミディエイトウィンドウ] ? DBLookup("SELECT ID, 月 FROM テーブル1 WHERE 月 LIKE '[1]*' or 月 is null") 1;1月;4; と WHERE節をテストすることが可能です。 この場合、ID=1、ID=4 のレコードがヒットしています。 なお、<and [条件] is null>は Or と同じ条件の併記ですので無駄と思います。 <テーブル1> ID   月   月次 1   1月   1月 2   2月   2月 3   3月   3月 4 5   5月   5月 列[月次]は、日付型です。 ? DBLookup("SELECT ID, 月, 月次 FROM テーブル1 WHERE 月次 LIKE '2006/01*' or 月次 is null") 1;1月;2006/01/01;4;; ? DBLookup("SELECT ID, 月, 月次 FROM テーブル1 WHERE 月次 LIKE '[2006/01]*' or 月次 is null") 1;1月;2006/01/01;2;2月;2006/02/01;3;3月;2006/03/01;4;;;5;5月;2006/05/01 最初は、目的通りの結果を得ています。 が、2度目は、全てを取得しています。 これは、Like文の文法上、当然の結果です。 *DBLookup()のテストをしたら、偶然に2番目の書き方をして判明した次第です。 <s_husky sql リファレンスより>************************************************************************************************************** WHERE <文字型列> LIKE '<値>' <文字型列>には、CHAR型の列の名前を記述し<値>には文字列をシングルクォーテーション(’)で囲んで指定します。 <値>の文字列には、次のようなワイルドカード文字列を使うことができます。 *______ 0個以上の文字に対応します。  ?______ 任意の1文字に対応します。  [...]____ 各カッコ内に指定した文字に対応します。  [^...]___ 各カッコ内に指定した文字以外に対応します。  ******************************************************************************************************************* 次は、私が考えた DBLookup() です。 DAO を利用していますので、参照設定で DAO を組み込む必要があります。 役に立てば幸いです。 Public Function DBLookup(ByVal strQuerySQL As String) As String On Error GoTo Err_DBLookup   Dim I   As Integer   Dim N   As Integer   Dim Datas As String   Dim dbs  As DAO.Database   Dim rst  As DAO.Recordset      Set dbs = CurrentDb   Set rst = dbs.OpenRecordset(strQuerySQL)   With rst     Do Until .EOF       N = .Fields.Count - 1       For I = 0 To N         Datas = Datas & .Fields(I) & ";"       Next I       .MoveNext     Loop   End With Exit_DBLookup: On Error Resume Next   rst.Close   dbs.Close   DBLookup = Left(Datas, Len(Datas) - 1)   Exit Function Err_DBLookup:   Datas = ""   MsgBox Err.Description   Resume Exit_DBLookup End Function

noname#60992
noname#60992
回答No.1

=[条件] or is null and [条件] is null でいかがでしょうか? (あいまい検索ではないですけれど)

bokujyou
質問者

お礼

残念できませんでした。さっそくの回答ありがとうございました。

関連するQ&A