問題ID:19563の正解の選択肢について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-7-6 11:29
rm86choppa  新米   投稿数: 1
苗字が「佐藤」で始まる従業員を検索するには、どの問い合わせを実行しますか(該当するものを全て選択して下さい)。
上の問題の正解で、「SELECT employee_id, employee_name FROM employees WHERE INSTR(employee_name, '佐藤') = 1;」のこちらが正解になるのがなぜかわかりません。イコールのあとが2であれば正解のような気がするのですが、認識間違ってるでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-7-6 14:45
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
「SELECT employee_id, employee_name FROM employees WHERE INSTR(employee_name, '佐藤') = 1;」のこちらが正解になるのがなぜかわかりません。イコールのあとが2であれば正解のような気がするのですが、認識間違ってるでしょうか?
INSTR() は、第2引数の文字列が第1引数の何文字目にあるかを返すので
・1が返る:1文字目(最初の文字から)マッチしている
・2が返る:2文字目(文字列の先頭は「佐藤」で始まらない、なにか1文字先頭にある)
ということになるんですね。

単純に関数を実行してみればわかります。Oracleではないですが、同じ機能を持つのでsqlite3でやってます。
$ sqlite3
SQLite version 3.28.0 2019-04-15 14:49:49
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> select instr('テスト文字列佐藤', '佐藤');
7 ←「テスト文字列」の6文字が先にあって、7文字目から「佐藤」がマッチする
sqlite> select instr('佐藤', '佐藤');
1 ←1文字目から「佐藤」にマッチする

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.