メインコンテンツへスキップ
見出し画像

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)
    とした場合何が返ってくるでしょうか?

    画像
    SUBSTRING('abcde' FROM -1 FOR -1)と書いた場合の各種DBの動作

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

    ということで作りました。

    SUBSTRING非正常動作早見表

    入力文字列はabcdeです。

    画像
    SUBSTRING非正常動作早見表

    SUBSTRING、SUBSTR外部仕様(Tsurugi)

    Tsurugiでは詳細な仕様を文書化しています。ご興味のある方は以下

    jogasaki/docs/substring_substr-ja.md at master · project-tsurugi/jogasaki


    あなたへのおすすめ