文字列関数

TiDB は、 MySQL 5.7で利用可能な文字列関数のほとんど、MySQL 8.0 で利用可能な文字列関数の一部、Oracle 21 で利用可能な関数の一部をサポートしています。

サポートされている関数

名前説明
ASCII()左端の文字の数値を返す
BIN()数値のバイナリ表現を含む文字列を返します
BIT_LENGTH()引数の長さをビット単位で返す
CHAR()渡された整数ごとに文字を返す
CHAR_LENGTH()引数の文字数を返す
CHARACTER_LENGTH()CHAR_LENGTH()の同義語
CONCAT()連結された文字列を返す
CONCAT_WS()区切り文字で連結して返す
ELT()インデックス番号の文字列を返す
EXPORT_SET()値ビットに設定されているすべてのビットに対してオン文字列を取得し、設定されていないすべてのビットに対してオフ文字列を取得する文字列を返します。
FIELD()後続の引数の最初の引数のインデックス(位置)を返します。
FIND_IN_SET()2番目の引数内の最初の引数のインデックス位置を返します
FORMAT()指定された小数点以下の桁数でフォーマットされた数値を返します。
FROM_BASE64()Base64文字列にデコードして結果を返す
HEX()10進数または文字列値の16進数表現を返します
INSERT()指定した位置に指定した文字数までの部分文字列を挿入します。
INSTR()部分文字列の最初の出現のインデックスを返す
LCASE()LOWER()の同義語
LEFT()指定された左端の文字数を返す
LENGTH()文字列の長さをバイト単位で返す
LIKEシンプルなパターンマッチング
LOCATE()部分文字列の最初の出現位置を返す
LOWER()引数を小文字で返す
LPAD()指定された文字列を左詰めにした文字列引数を返す
LTRIM()先頭のスペースを削除
MAKE_SET()対応するビットが設定されているコンマ区切りの文字列のセットを返します。
MID()指定された位置から始まる部分文字列を返す
NOT LIKE単純なパターンマッチングの否定
NOT REGEXPREGEXPの否定
OCT()数値の8進表現を含む文字列を返します
OCTET_LENGTH()LENGTH()の同義語
ORD()引数の左端の文字の文字コードを返す
POSITION()LOCATE()の同義語
QUOTE()SQL文で使用する引数をエスケープする
REGEXP正規表現を使用したパターンマッチング
REGEXP_INSTR()正規表現に一致する部分文字列の開始インデックスを返します(MySQLと部分的に互換性があります。詳細についてはMySQL との正規表現の互換性を参照してください)
REGEXP_LIKE()文字列が正規表現に一致するかどうか(MySQLと部分的に互換性があります。詳細についてはMySQL との正規表現の互換性を参照してください)
REGEXP_REPLACE()正規表現に一致する部分文字列を置換します(MySQLと部分的に互換性があります。詳細についてはMySQL との正規表現の互換性を参照してください)
REGEXP_SUBSTR()正規表現に一致する部分文字列を返します(MySQLと部分的に互換性があります。詳細についてはMySQL との正規表現の互換性を参照してください)
REPEAT()文字列を指定された回数繰り返す
REPLACE()指定された文字列の出現箇所を置換する
REVERSE()文字列内の文字を反転する
RIGHT()指定された右端の文字数を返す
RLIKEREGEXPの同義語
RPAD()文字列を指定された回数追加する
RTRIM()末尾のスペースを削除
SPACE()指定された数のスペースの文字列を返します
STRCMP()2つの文字列を比較する
SUBSTR()指定された部分文字列を返す
SUBSTRING()指定された部分文字列を返す
SUBSTRING_INDEX()指定された回数の区切り文字より前の文字列から部分文字列を返します。
TO_BASE64()引数をbase64文字列に変換して返します
TRANSLATE()文字列内のすべての文字を他の文字に置き換えます。Oracle のように空の文字列をNULLとして扱いません。
TRIM()先頭と末尾のスペースを削除する
UCASE()UPPER()の同義語
UNHEX()数値の16進表現を含む文字列を返します
UPPER()大文字に変換
WEIGHT_STRING()入力文字列の重み文字列を返す

サポートされていない関数

  • LOAD_FILE()
  • MATCH()
  • SOUNDEX()

MySQL との正規表現の互換性

次のセクションでは、 REGEXP_INSTR()REGEXP_LIKE()REGEXP_REPLACE()REGEXP_SUBSTR()を含む、MySQL との正規表現の互換性について説明します。

構文の互換性

MySQL は International Components for Unicode (ICU) を使用して正規表現を実装し、TiDB は RE2 を使用します。2 つのライブラリ間の構文の違いについては、 ICUドキュメントRE2 構文を参照してください。

match_type互換性

TiDB と MySQL 間のmatch_typeの値オプションは次のとおりです。

  • TiDB の値オプションは"c""i""m""s"であり、MySQL の値オプションは"c""i""m""n""u"です。

  • TiDB の"s" MySQL の"n"に相当します。TiDB で"s"設定されている場合、 .文字は行末文字 ( \n ) にも一致します。

    たとえば、MySQL のSELECT REGEXP_LIKE(a, b, "n") FROM t1 TiDB のSELECT REGEXP_LIKE(a, b, "s") FROM t1と同じです。

  • TiDB は、MySQL で Unix のみの行末を意味する"u"サポートしていません。

データ型の互換性

バイナリ文字列型に対する TiDB と MySQL のサポートの違い:

  • MySQL は 8.0.22 以降、正規表現関数でバイナリ文字列をサポートしていません。詳細については、 MySQL ドキュメントを参照してください。ただし、実際には、すべてのパラメータまたは戻り値の型がバイナリ文字列である場合、MySQL で正規関数が機能します。それ以外の場合は、エラーが報告されます。
  • 現在、TiDB ではバイナリ文字列の使用が禁止されており、どのような状況でもエラーが報告されます。

その他の互換性

  • TiDB で空の文字列を置き換える動作は MySQL とは異なります。1 REGEXP_REPLACE("", "^$", "123")例に挙げます。

    • MySQL は空の文字列を置き換えず、結果として""を返します。
    • TiDB は空の文字列を置き換え、結果として"123"を返します。
  • TiDB でグループをキャプチャするために使用されるキーワードは、MySQL とは異なります。MySQL ではキーワードとして$使用されますが、TiDB ではキーワードとして\\が使用されます。また、TiDB では0から9までの番号のグループのみをキャプチャできます。

    たとえば、次の SQL ステートメントは TiDB にab返します。

    SELECT REGEXP_REPLACE('abcd','(.*)(.{2})$','\\1') AS s;

このページは役に立ちましたか?