14歳の自分に衝撃の事実を告げてください

【OSS-DB】
OSS-DBの問題についての質問です。

--------------------

次のSQL文で表を作成した後、多数の行をINSERTした。

CREATE TABLE foo (id INTEGER, val VARCHAR(50));

この表で val 列の2文字目と3文字目がいずれも A である行をすべて検索したい。
誤っているものを1つ選びなさい。

A. SELECT * FROM foo WHERE val LIKE '_AA%';

B. SELECT * FROM foo WHERE val ~ '^.AA';

C. SELECT * FROM foo WHERE substring(val, 2, 2) = 'AA';

D. SELECT * FROM foo WHERE substring(val from 2 for 2) = 'AA';

E. SELECT * FROM foo WHERE position('AA' in val) = 2;

答えはEでした。

・質問が2つあります。

①Bの「~ '^.AA';」についてです。
「~ ^'○○ '」は○○が文字列の先頭にマッチというふうに習ったのですが、その場合、Bはあやまりではないでしょうか?
「.」に何か意味があるのでしょうか?

②CとDのsubstringの使い方がイマイチよくわかっていません…
教えていただけると嬉しいです。

③解説では、「選択肢Eは文字列 val から部分文字列 'AA' を検索するので正しく検索できそうですが、val が AAA で始まるときは 1 が返ってしまいます。」
とありますが、'AA' でも検索はできないですよね?
開始位置を数字で知らせてくれるだけでは無いのでしょうか?

よろしくお願いします。

A 回答 (1件)

1


任意の一文字
2
二文字目から2文字分
3
AAという文字が含まれる開始位置を取得して、それが2文字目だったら、としようとしている。
しかし、解説通りAAAだとすると、開始位置は1になるのでNG。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す