文字列関数
TiDB は、 MySQL 5.7で使用可能な文字列関数のほとんど、MySQL 8.0 で使用可能な文字列関数の一部、Oracle 21 で使用可能な関数の一部をサポートします。
Oracle と TiDB の関数と構文の比較については、 OracleとTiDBの機能と構文の比較を参照してください。
サポートされている関数
名前 | 説明 |
---|---|
ASCII() | 左端の文字の数値を返す |
BIN() | 数値のバイナリ表現を含む文字列を返します。 |
BIT_LENGTH() | 引数の長さをビット単位で返します |
CHAR() | 渡された各整数の文字を返します |
CHAR_LENGTH() | 引数の文字数を返す |
CHARACTER_LENGTH() | CHAR_LENGTH() の同義語 |
CONCAT() | 連結された文字列を返す |
CONCAT_WS() | セパレータを使用して連結して返す |
ELT() | インデックス番号の文字列を返す |
EXPORT_SET() | 値ビットに設定されているすべてのビットに対して on 文字列を取得し、未設定のすべてのビットに対して off 文字列を取得するような文字列を返します。 |
FIELD() | 後続の引数の最初の引数のインデックス (位置) を返します。 |
FIND_IN_SET() | 2 番目の引数内の最初の引数のインデックス位置を返します。 |
FORMAT() | 指定された小数点以下の桁数にフォーマットされた数値を返します |
FROM_BASE64() | Base-64 文字列にデコードして結果を返す |
HEX() | 10 進数または文字列値の 16 進数表現を返します。 |
INSERT() | 指定された位置に指定された文字数までの部分文字列を挿入します |
INSTR() | 最初に出現した部分文字列のインデックスを返します。 |
LCASE() | LOWER() の同義語 |
LEFT() | 指定されたとおりに左端の文字数を返します |
LENGTH() | 文字列の長さをバイト単位で返します |
LIKE | 簡単なパターンマッチング |
LOCATE() | 部分文字列が最初に出現する位置を返します。 |
LOWER() | 引数を小文字で返します |
LPAD() | 指定された文字列で左詰めされた文字列引数を返します。 |
LTRIM() | 先頭のスペースを削除する |
MAKE_SET() | ビットセット内の対応するビットを持つコンマ区切りの文字列のセットを返します。 |
MID() | 指定された位置から始まる部分文字列を返します |
NOT LIKE | 単純なパターンマッチングの否定 |
NOT REGEXP | REGEXP の否定 |
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() | 指定された右端の文字数を返します |
RLIKE | REGEXP の同義語 |
RPAD() | 指定された回数だけ文字列を追加します |
RTRIM() | 末尾のスペースを削除する |
SPACE() | 指定された数のスペースを含む文字列を返します。 |
STRCMP() | 2 つの文字列を比較する |
SUBSTR() | 指定された部分文字列を返します |
SUBSTRING() | 指定された部分文字列を返します |
SUBSTRING_INDEX() | 区切り文字が指定された回数出現する前の文字列から部分文字列を返します。 |
TO_BASE64() | Base-64 文字列に変換された引数を返します |
TRANSLATE() | 文字列内のすべての文字を他の文字に置き換えます。 Oracle のように空の文字列をNULL として扱いません。 |
TRIM() | 先頭と末尾のスペースを削除する |
UCASE() | UPPER() の同義語 |
UNHEX() | 数値の 16 進表現を含む文字列を返します。 |
UPPER() | 大文字に変換する |
WEIGHT_STRING() | 入力文字列の重み文字列を返します。 |
サポートされていない関数
LOAD_FILE()
MATCH()
SOUNDEX()
MySQL との正規表現の互換性
次のセクションでは、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 サポートの違い:
以下ではREGEXP_REPLACE("", "^$", "123")
を例にします。
- MySQL は空の文字列を置換せず、結果として
""
を返します。 - TiDB は空の文字列を置き換え、結果として
"123"
を返します。