• ベストアンサー

”1つ目の_より左のすべての文字を取得する”クエリ

テーブル1のファイル名フィールドには 銀行_あああ銀行 銀行_いいい銀行 証券会社_あああ証券 証券会社_いいい証券 ・ ・ ・ というデータが入っていて、「銀行」や「証券会社」以外にもキーワードがあるのですが、 その先頭文字を取得するSQL文を教えてください。 条件としては、”1つ目の_より左のすべての文字を取得する”をしたいです。 結果は 銀行 証券会社 のように重複している値は表示させたくないです。 ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

【要旨】 添付画像のようなクエリを作成するか、新規クエリのSQLビューに以下のSQL文 を使用します(切り出した「銀行」などを『種別』フィールドとして表示させる場合): Select Distinct Left([テーブル1].[ファイル名], InStr(1, [テーブル1].[ファイル名], "_", 0) - 1) As 種別 From テーブル1; 【詳細】 <「”1つ目の_より左のすべての文字を取得する”」について> 「特定文字の位置確認」には、InStr関数を使用します。 「指定位置より左側の文字すべての取得」には、Left関数を使用します。 (引数の詳細はヘルプを参照下さい) 従って、  Left([テーブル1].[ファイル名], InStr(1, [テーブル1].[ファイル名], "_", 0) - 1) という式を使用すれば、目的を果たせるかと思います。 (「_」を半角に限定するため、InStr関数の第4引数には「0」を指定しています。  Left関数の第2引数で、InStr関数の結果から「-1」しているのは、「_」自体  を含ませないためです) <「重複している値は表示させたくない」について> クエリのプロパティシートに、『固有の値』という設定項目がありますので、これを 「はい」にすると、表示対象となるすべてのフィールドの値が同じものは、1レコード に集約されて表示されますので、これを使用すればOkです。 (SQL文では、「Select」の後に「Distinct」という句が追加される形になります) なお、「銀行」「証券会社」といった結果と同時に、元の「あああ銀行」などを表示 させようとすると、1件に集約されなくなりますので、ご注意下さい(念のため)。 ※クエリのプロパティシートは、   1)クエリをデザインビューで開く   2)何もないところを右クリックして表示されるメニューから、「プロパティ」を選択  で表示できます。  (上記『固有の値』の項目が表示されていない場合は、クエリのデザインビューの   中の、何もないところを1回クリックしてみてください) ・・・以上の2つを組み合わせると、冒頭のSQL文となります。

ZQIZRTMCNR
質問者

お礼

InStrを使うのですね。うまくいきました。とてもわかりやすい説明ありがとうございます。

関連するQ&A