
SQL,SUBSTRING各種DBの挙動、Tsurugiもあるよ
SUBSTRING 関数の概要
SUBSTRING は、文字列の一部を抽出するための標準SQL関数です。ISO/IEC 9075(通称ISO SQL)で定義されており、多くのデータベース製品でも対応しています。
基本構文
SUBSTRING(文字列 FROM 開始位置 [FOR 文字数])
文字列: 抽出対象の文字列(リテラルや列など)
開始位置: 抽出を始める位置(1から始まる)
文字数(省略可能): 抽出する文字数
使用例
SELECT SUBSTRING('abcde' FROM 3 FOR 2); -- 結果: 'cd'
注意点
位置は 1 から始まる(0ではなく)。
FOR 句を省略すると、指定した位置から末尾までの文字列が返されます。
備考
同じ動作をするSQL関数にSUBSTRがあります。SUBSTRINGの別名(エイリアス)です。SUBSTRはISOには含まれていませんが、多くのDBで実装されています。SUBSTRINGの構文はFROM、FORがあり「古めかしい」ですがSUBSTRは","で構文が構成されています。
SUBSTR(文字列, 開始位置 [, 文字数])
本題
SUBSTRINGはDBによって挙動が違います。いや少し語弊があるかもしれません。SUBSTRING('abcde' FROM 3 FOR 2)のような真っ当な使い方をすれば、どのDBも同じ結果を返します。
真っ当ではない使い方例えば
SUBSTRING('abcde' FROM -1 FOR -1)
とした場合何が返ってくるでしょうか?

という風に各種DBで動作が違います。このような動作違いは困りますね。
同じSQLを使っても動作が異なるから使いまわしできない、、、。
各種DBの動作を統一できませんが非正常なケースでDBの動作違いがわかる早見表があると便利だとは思いませんか?
ということで作りました。
SUBSTRING非正常動作早見表
入力文字列はabcdeです。

SUBSTRING、SUBSTR外部仕様(Tsurugi)
Tsurugiでは詳細な仕様を文書化しています。ご興味のある方は以下
jogasaki/docs/substring_substr-ja.md at master · project-tsurugi/jogasaki