16bit!

エンジニアじゃなくなっちゃった人が何かを書くブログ

【SQL】substrbでマイナス指定したらどうなるのかという話

この前、substrを使ったSQLでの文字列の切り出し方法を書きましたが、
今回はそれのおまけというか備考というか。


基本構文

select
  substrb('あいうえお', 2, 2)
from
  dual

まずおさらいですが、substrbは"substrb(カラム名, 開始位置, バイト数)"という書き方で使う、
文字列を範囲指定して切り出し抽出するための構文です。
上記の例だと2バイト目から2バイト分で、'い'が抽出されます。

で、この「開始位置」と「バイト数」は数値で指定するのですが、
これをマイナスで指定するとどうなるのか、という(割とどうでもいい)話です。


マイナス指定してみる

select
  substrb('あいうえお', -2, 2) as '開始位置マイナス',
  substrb('あいうえお', 2, -2) as '範囲マイナス'
from
  dual

まず、開始位置をマイナス指定する場合ですが、
この場合開始位置は、文字列の後ろからnバイト目という指定になります。
あまり良い使用例は思いつきませんが、
文字列の長さは分からないけど、最後のN文字だけ抽出したいという場合に使えます。

次に抽出範囲をマイナス指定する場合ですが、この場合は0バイトが指定されているのと同じ扱いになります。
よって当然、結果としては何も抽出されません。
こっちは正直使い道がないですね、多分。


結果

開始位置マイナス 範囲マイナス


終わり。