文字列関数
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() | 大文字に変換 |
サポートされていない関数
LOAD_FILE()
MATCH
SOUNDEX()
SOUNDS LIKE
WEIGHT_STRING()
MySQL との正規表現の互換性
次のセクションでは、MySQL との正規表現の互換性について説明します。
構文の互換性
MySQL は International Components for Unicode (ICU) を使用して正規表現を実装し、TiDB は RE2 を使用します。 2 つのライブラリの構文の違いについては、 ICU 文書とRE2 構文を参照してください。
match_type
互換性
TiDB と MySQL の間のmatch_type
の値のオプションは次のとおりです。
"i"
の値オプションは"c"
、および"m"
であり、"i"
の値"m"
は"c"
、"n"
"s"
"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 は
"u"
をサポートしていません。これは、MySQL での Unix のみの行末を意味します。
データ型の互換性
バイナリ文字列型に対する TiDB と MySQL のサポートの違い:
- MySQL は、8.0.22 以降、正規表現関数でバイナリ文字列をサポートしていません。詳細については、 MySQL ドキュメントを参照してください。しかし実際には、すべてのパラメータまたは戻り値の型がバイナリ文字列の場合、通常の関数は MySQL で機能します。そうしないと、エラーが報告されます。
- 現在、TiDB はバイナリ文字列の使用を禁止しており、どのような状況でもエラーが報告されます。
その他の互換性
空の文字列の置換における TiDB と MySQL のサポートの違い:
以下は、例としてREGEXP_REPLACE("", "^$", "123")
を使用します。
- MySQL は空の文字列を置き換えず、結果として
""
を返します。 - TiDB は空の文字列を置き換え、結果として
"123"
を返します。