今回は、Silverの「S3 開発/SQL - S3.2 組み込み関数(文字列演算子)」からの出題です。
SELECT val1 + val2 FROM test;
SELECT val1 . val2 FROM test;
SELECT concat(val1, val2) FROM test;
SELECT coalesce(val1, ‘’) || coalesce(val2, ‘’) FROM test;
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2014年2月6日
文字列を結合するときに利用するSQL標準の演算子は || です。val1 || val2 とすると、val1 と val2 を結合した文字列が返されますが、一方が NULL の場合は、結合の結果が NULL になります。
COALESCE関数を使うと、NULL値を他の値で置き換えることができ、coalesce(val1, ‘’)とすると、val1がNULLでなければval1、NULLの時は空文字を返します。これを使って選択肢Eのようにするのが、1つの解決策です。
PostgreSQL 9.1で追加されたconcat関数を使っても、文字列の結合ができますが、この関数はNULLを無視します。
従って、正解はDとEです。
なお、文字列の結合については、RDBMSの種類によって、一部、実装が異なります。例えばOracleでは || を使った時でもNULLを無視した結合をします。MySQLでは || が論理和の演算子であり、文字列結合には concat 関数を使いますが、NULLが無視されず、引数の1つがNULLだと結合結果もNULLになります。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.