Oracle Database SQL(ORACLE MASTER Silver SQL 2019) 無料問題 3 / 10 ・ 分野4: 単一行関数を使用した出力のカスタマイズ
次の SELECT 文の結果として正しいものはどれか。 SELECT TRIM('0' FROM '0450890') FROM dual;
- '0450890':変わらない。除けるのは空白だけ
- '450890':指定が無いので LEADING になり、先頭の0を除く
- '4589':途中の0を含めて、文字列から0が消える
- '45089':先頭と末尾の0が除かれ、途中の0は残る
正解と解説を見る
正解: D
正解の理由
SQL Language Reference の TRIM は、「BOTH または3つのどれも指定しないとき、trim_character と等しい先頭と末尾の文字を除く」と定める。0450890 の両端の0が除かれ、途中の0(45 と 89 の間)は残るので、45089 になる。
違う選択肢
「'450890':指定が無いので LEADING になり、先頭の0を除く」… LEADING が既定と読んだ説明である。LEADING、TRAILING、BOTH のどれも指定しないときは BOTH と同じなので、末尾の0も除かれる
「'4589':途中の0を含めて、文字列から0が消える」… REPLACE のように文字列中の0を消す関数の読み方である。TRIM が除くのは両端に連続する文字だけで、途中の0は残る
「'0450890':変わらない。除けるのは空白だけ」… 空白しか除けないと読んだ説明である。空白が除かれるのは trim_character を省略したときの既定で、0 を指定すれば両端の0が除かれる
押さえどころ
TRIM の trim_character は1文字で、省略すると空白になる。trim_source を NULL にすると、結果も NULL になる。文字列の中の文字を置き換えるには REPLACE を使う。
Oracle Database SQL(ORACLE MASTER Silver SQL 2019)の演習アプリ(無料10問・全問は購入で)へ