このページは機械翻訳したものです。
表 12.12 「文字列関数および演算子」
| 名前 | 説明 |
|---|---|
ASCII() | 左端の文字の数値を返します |
BIN() | 数値のバイナリ表現を含む文字列を返します |
BIT_LENGTH() | ビット単位で引数の長さを返します |
CHAR() | 渡された各整数の文字を返します |
CHAR_LENGTH() | 引数の文字数を返します |
CHARACTER_LENGTH() | CHAR_LENGTH() のシノニムです |
CONCAT() | 連結された文字列を返します |
CONCAT_WS() | 連結されたものをセパレータ付きで返します |
ELT() | インデックス番号位置の文字列を返します |
EXPORT_SET() | 値 bits 内の各ビットが設定されている場合は on 文字列を取得し、各ビットが設定されていない場合には off 文字列を取得するように、文字列を返します |
FIELD() | 後続の引数の最初の引数のインデックス (位置) |
FIND_IN_SET() | 2 番目の引数内の最初の引数のインデックス (位置) |
FORMAT() | 指定された小数点以下桁数に書式設定された数値を返します |
FROM_BASE64() | base64 でエンコードされた文字列をデコードして結果を返す |
HEX() | 小数または文字列値の 16 進数表現 |
INSERT() | 指定した位置に指定した文字数まで部分文字列を挿入 |
INSTR() | 部分文字列が最初に出現する位置のインデックスを返します |
LCASE() | LOWER() のシノニムです |
LEFT() | 左端から指定された数の文字を返します |
LENGTH() | 文字列の長さをバイト単位で返します |
LIKE | 単純なパターン一致 |
LOAD_FILE() | 指定されたファイルをロードします |
LOCATE() | 部分文字列が最初に出現する位置を返します |
LOWER() | 引数を小文字で返します |
LPAD() | 指定された文字列で左からパディングした文字列引数を返します |
LTRIM() | 先頭の空白を削除します |
MAKE_SET() | bits セット内の対応するビットを持つ、カンマ区切り文字列のセットを返します |
MATCH | 全文検索を実行します |
MID() | 指定された位置から始まる部分文字列を返します |
NOT LIKE | 単純なパターン一致の否定 |
NOT REGEXP | REGEXP の否定 |
OCT() | 数値の 8 進数表現を含む文字列を返します |
OCTET_LENGTH() | LENGTH() のシノニムです |
ORD() | 引数の左端の文字の文字コードを返します |
POSITION() | LOCATE() のシノニムです |
QUOTE() | SQL ステートメント内で使用するために引数をエスケープします |
REGEXP | 文字列が正規表現と一致するかどうか |
REGEXP_INSTR() | 正規表現に一致する部分文字列の開始インデックス |
REGEXP_LIKE() | 文字列が正規表現と一致するかどうか |
REGEXP_REPLACE() | 正規表現に一致する部分文字列の置換 |
REGEXP_SUBSTR() | 正規表現に一致する部分文字列を返します |
REPEAT() | 文字列を指定された回数だけ繰り返します |
REPLACE() | 指定された文字列の出現箇所を置き換えます |
REVERSE() | 文字列内の文字を逆順に並べ替えます |
RIGHT() | 右端から指定された数の文字を返します |
RLIKE | 文字列が正規表現と一致するかどうか |
RPAD() | 指定された回数だけ文字列を追加します |
RTRIM() | 末尾の空白を削除します |
SOUNDEX() | soundex 文字列を返します |
SOUNDS LIKE | 音声を比較します |
SPACE() | 指定された数の空白で構成される文字列を返します |
STRCMP() | 2 つの文字列を比較します |
SUBSTR() | 指定された部分文字列を返します |
SUBSTRING() | 指定された部分文字列を返します |
SUBSTRING_INDEX() | 文字列から、区切り文字が指定された回数出現する前の部分文字列を返します |
TO_BASE64() | base 64 文字列に変換された引数を返します |
TRIM() | 先頭と末尾にある空白を削除します |
UCASE() | UPPER() のシノニムです |
UNHEX() | 数値の 16 進数表現を含む文字列を返します |
UPPER() | 大文字に変換します |
WEIGHT_STRING() | 文字列の重み文字列を返します |
文字列値の関数は、結果の長さがmax_allowed_packet システム環境変数の値よりも長くなると、NULL を返します。セクション5.1.1「サーバーの構成」を参照してください。
文字列の位置を操作する関数では、最初の位置には数値 1 が付けられます。
長さの引数を取る関数では、整数以外の引数はもっとも近い整数に丸められます。
ASCII(str)文字列
strの左端の文字の数値を返します。strが空の文字列である場合は、0を返します。strがNULLである場合はNULLを返します。ASCII()は、8 ビット文字の場合に動作します。mysql> SELECT ASCII('2'); -> 50mysql> SELECT ASCII(2); -> 50mysql> SELECT ASCII('dx'); -> 100ORD()関数も参照してください。BIN(N)Nのバイナリ値の文字列表現を返します。Nは longlong (BIGINT) 数字です。 これは、CONV(と同等です。N,10,2)NがNULLである場合はNULLを返します。mysql> SELECT BIN(12); -> '1100'BIT_LENGTH(str)文字列
strの長さをビット単位で返します。mysql> SELECT BIT_LENGTH('text'); -> 32CHAR(N,... [USINGcharset_name])CHAR()は各N引数を整数として解釈し、それらの整数のコード値で指定された文字を構成している文字列を返します。NULL値はスキップされます。mysql> SELECT CHAR(77,121,83,81,'76'); -> 'MySQL'mysql> SELECT CHAR(77,77.3,'77.3'); -> 'MMM'255 よりも大きい
CHAR()引数は、複数の結果バイトに変換されます。 たとえば、CHAR(256)はCHAR(1,0)に同等で、CHAR(256*256)はCHAR(1,0,0)に同等です。mysql> SELECT HEX(CHAR(1,0)), HEX(CHAR(256));+----------------+----------------+| HEX(CHAR(1,0)) | HEX(CHAR(256)) |+----------------+----------------+| 0100 | 0100 |+----------------+----------------+mysql> SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256));+------------------+--------------------+| HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) |+------------------+--------------------+| 010000 | 010000 |+------------------+--------------------+デフォルトでは、
CHAR()はバイナリ文字列を返します。 指定された文字セットで文字列を生成するには、オプションのUSING句を使用します。mysql> SELECT CHARSET(CHAR(X'65')), CHARSET(CHAR(X'65' USING utf8));+----------------------+---------------------------------+| CHARSET(CHAR(X'65')) | CHARSET(CHAR(X'65' USING utf8)) |+----------------------+---------------------------------+| binary | utf8 |+----------------------+---------------------------------+USINGが指定され、結果文字列が指定された文字セットで不正である場合は、警告が発行されます。 また、厳密な SQL モードが有効になっている場合は、CHAR()からの結果はNULLになります。CHAR_LENGTH(str)文字で測定された文字列
strの長さを返します。 マルチバイト文字は、単一の文字としてカウントされます。 つまり、5 つの 2 バイト文字を含む文字列では、LENGTH()は10を返し、CHAR_LENGTH()は5を返します。CHARACTER_LENGTH(str)CHARACTER_LENGTH()はCHAR_LENGTH()のシノニムです。CONCAT(str1,str2,...)引数を連結することで生成される文字列を返します。 1 つ以上の引数を持つ場合があります。 すべての引数が非バイナリ文字列の場合は、結果も非バイナリ文字列になります。 引数にバイナリ文字列が含まれる場合は、結果はバイナリ文字列になります。 数値の引数は、同等の非バイナリ文字列形式に変換されます。
引数のいずれかかが
NULLである場合、CONCAT()はNULLを返します。mysql> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL'mysql> SELECT CONCAT('My', NULL, 'QL'); -> NULLmysql> SELECT CONCAT(14.3); -> '14.3'引用符で囲まれた文字列では、文字列を並べて配置することで連結が実行されます。
mysql> SELECT 'My' 'S' 'QL'; -> 'MySQL'CONCAT_WS(separator,str1,str2,...)CONCAT_WS()は Concatenate With Separator (区切り文字を使用した連結) を表し、CONCAT()の特殊な形式です。 最初の引数は、残りの引数の区切り文字です。 区切り文字は、連結される文字列の間に追加されます。 区切り文字は、残りの引数と同様に文字列にすることができます。 区切り文字がNULLの場合は、結果もNULLになります。mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name'); -> 'First name,Second name,Last Name'mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name'); -> 'First name,Last Name'CONCAT_WS()では、空の文字列がスキップされません。 ただし、区切り文字引数のあとのNULL値はすべてスキップされます。ELT(N,str1,str2,str3,...)ELT()は、文字列リストのN番目の要素を返します。N=1の場合はstr1、N=2の場合はstr2のように返します。Nが1よりも小さいか、引数の数よりも大きい場合は、NULLを返します。ELT()はFIELD()の補数です。mysql> SELECT ELT(1, 'Aa', 'Bb', 'Cc', 'Dd'); -> 'Aa'mysql> SELECT ELT(4, 'Aa', 'Bb', 'Cc', 'Dd'); -> 'Dd'EXPORT_SET(bits,on,off[,separator[,number_of_bits]])値
bits内で各ビットが設定されている場合にはon文字列を取得し、値内で各ビットが設定されていない場合にはoff文字列を取得するように、文字列を返します。bitsのビットは、右から左 (下位ビットから上位ビット) へと検証されます。 文字列は、separator文字列 (デフォルトはカンマ文字,) で区切られた結果に左から右へと追加されます。 検証されるビット数は、number_of_bitsで指定されます。指定されない場合のデフォルトは 64 です。number_of_bitsが 64 よりも大きい場合は、警告なしで 64 に短縮されます。 符号なし整数として処理されるため、値 −1 は実際には 64 と同じです。mysql> SELECT EXPORT_SET(5,'Y','N',',',4); -> 'Y,N,Y,N'mysql> SELECT EXPORT_SET(6,'1','0',',',10); -> '0,1,1,0,0,0,0,0,0,0'FIELD(str,str1,str2,str3,...)str1、str2、str3、...リスト内でstrのインデックス (位置) を返します。strが見つからない場合は、0を返します。FIELD()へのすべての引数が文字列の場合は、すべての引数が文字列として比較されます。 すべての引数が数値の場合は、数字として比較されます。 それ以外の場合は、引数が倍精度として比較されます。NULLではどの値との等価比較にも失敗するため、strがNULLである場合は、戻り値が0になります。FIELD()はELT()の補数です。mysql> SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 2mysql> SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 0FIND_IN_SET(str,strlist)文字列
strがN部分文字列で構成される文字列リストstrlist内にある場合は、1 からNまでの範囲内の値を返します。 文字列リストは、,文字で区切られた部分文字列で構成された文字列です。 最初の引数が定数文字列で、2 番目がSET型のカラムの場合、FIND_IN_SET()関数はビット演算を使用するために最適化されます。strがstrlist内にない場合、またはstrlistが空の文字列の場合は、0を返します。 引数のいずれかがNULLである場合は、NULLを返します。 最初の引数にカンマ (,) 文字が含まれる場合は、この関数が正しく動作しません。mysql> SELECT FIND_IN_SET('b','a,b,c,d'); -> 2FORMAT(X,D[,locale])数値
Xを'#,###,###.##'のような書式に変換し、小数点第D位に丸めて、その結果を文字列として返します。Dが0の場合は、結果に小数点または小数部が含まれません。オプションの 3 番目のパラメータを使用すると、結果数の小数点、3 桁の区切り文字、および区切り文字間のグループ化に使用されるロケールを指定できます。 許可されるロケール値は、
lc_time_namesシステム変数の有効な値と同じです (セクション10.16「MySQL Server のロケールサポート」を参照してください)。 ロケールが指定されていない場合のデフォルトは、'en_US'です。mysql> SELECT FORMAT(12332.123456, 4); -> '12,332.1235'mysql> SELECT FORMAT(12332.1,4); -> '12,332.1000'mysql> SELECT FORMAT(12332.2,0); -> '12,332'mysql> SELECT FORMAT(12332.2,2,'de_DE'); -> '12.332,20'FROM_BASE64(str)TO_BASE64()で使用される base-64 でエンコードされたルールでエンコードされた文字列が指定され、デコードされた結果をバイナリ文字列として返します。 引数がNULLの場合または有効な base-64 文字列でない場合は、結果がNULLになります。 ルールのエンコードおよびデコードについての詳細は、TO_BASE64()の説明を参照してください。mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc')); -> 'JWJj', 'abc'HEX(,str)HEX(N)文字列の引数
strでは、HEX()はstrの 16 進数文字列表現を返します。str内の各文字の各バイトは、2 つの 16 進数字に変換されます。 (したがって、マルチバイト文字は 2 桁よりも大きくなります。) この演算の逆は、UNHEX()関数で実行されます。数値の引数
Nでは、HEX()は、longlong (BIGINT) 数字として処理されるNの 16 進数文字列表現を返します。 これは、CONV(と同等です。 この演算の逆は、N,10.16)CONV(HEX(で実行されます。N),16,10)mysql> SELECT X'616263', HEX('abc'), UNHEX(HEX('abc')); -> 'abc', 616263, 'abc'mysql> SELECT HEX(255), CONV(HEX(255),16,10); -> 'FF', 255INSERT(str,pos,len,newstr)位置
posで始まる部分文字列と、文字列newstrで置換されたlen文字長とともに、文字列strを返します。posが文字列の長さに収まらない場合は、元の文字列を返します。lenが残りの文字列の長さに収まらない場合は、位置posからの残りの文字列を置換します。 引数のいずれかがNULLである場合は、NULLを返します。mysql> SELECT INSERT('Quadratic', 3, 4, 'What'); -> 'QuWhattic'mysql> SELECT INSERT('Quadratic', -1, 4, 'What'); -> 'Quadratic'mysql> SELECT INSERT('Quadratic', 3, 100, 'What'); -> 'QuWhat'この関数はマルチバイトセーフです。
INSTR(str,substr)文字列
str内で部分文字列substrが最初に出現する位置を返します。 これは、引数の順序が逆になる点を除いて、2 つの引数形式のLOCATE()と同じです。mysql> SELECT INSTR('foobarbar', 'bar'); -> 4mysql> SELECT INSTR('xbar', 'foobar'); -> 0この関数はマルチバイトセーフであり、1 つ以上の引数がバイナリ文字列である場合にのみ大文字と小文字が区別されます。
LCASE(str)LCASE()はLOWER()のシノニムです。ビューで使用される
LCASE()は、ビュー定義の格納時にLOWER()としてリライトされます。 (Bug #12844279)LEFT(str,len)文字列
strから左端のlen文字を返し、引数がNULLである場合はNULLを返します。mysql> SELECT LEFT('foobarbar', 5); -> 'fooba'この関数はマルチバイトセーフです。
LENGTH(str)バイトで測定された文字列
strの長さを返します。 マルチバイト文字は、複数のバイトとしてカウントされます。 つまり、5 つの 2 バイト文字を含む文字列では、LENGTH()は10を返し、CHAR_LENGTH()は5を返します。mysql> SELECT LENGTH('text'); -> 4注記MySQL では、
Length()OpenGIS 空間関数の名前はST_Length()です。LOAD_FILE(file_name)ファイルを読み取り、ファイルの内容を文字列として返します。 この関数を使用するには、ファイルがサーバーホストに配置されている必要があり、ファイルへのフルパス名を指定し、
FILE権限を持つ必要があります。 ファイルは、サーバーで読取り可能で、そのサイズがmax_allowed_packetバイト未満である必要があります。secure_file_privシステム変数が空でないディレクトリ名に設定されている場合は、そのディレクトリ内にロード対象のファイルが配置されている必要があります。 (MySQL 8.0.17 より前では、ファイルはサーバーから読み取り可能であるだけでなく、すべてから読み取り可能である必要があります。)ファイルが存在しない場合、または上記の条件が満たされていないために、ファイルを読み取ることができない場合、この関数は
NULLを返します。character_set_filesystemシステム変数では、リテラル文字列として指定されているファイル名の解釈が制御されます。mysql> UPDATE t SET blob_col=LOAD_FILE('/tmp/picture') WHERE id=1;LOCATE(,substr,str)LOCATE(substr,str,pos)1 番目の構文は、文字列
str内で、部分文字列substrが最初に出現する位置を返します。 2 番目の構文は、文字列str内の位置pos以降で、部分文字列substrが最初に出現する位置を返します。str内にsubstrがない場合は、0を返します。 引数のいずれかがNULLである場合は、NULLを返します。mysql> SELECT LOCATE('bar', 'foobarbar'); -> 4mysql> SELECT LOCATE('xbar', 'foobar'); -> 0mysql> SELECT LOCATE('bar', 'foobarbar', 5); -> 7この関数はマルチバイトセーフであり、1 つ以上の引数がバイナリ文字列である場合にのみ大文字と小文字が区別されます。
LOWER(str)現在の文字セットのマッピングに従って、すべての文字が小文字に変更された文字列
strを返します。 デフォルトはutf8mb4です。mysql> SELECT LOWER('QUADRATICALLY'); -> 'quadratically'LOWER()(およびUPPER()) をバイナリ文字列 (BINARY、VARBINARY、BLOB) に適用しても、何の効果もありません。 バイナリ文字列の大文字と小文字の変換を実行するには、まず文字列に格納されているデータに適した文字セットを使用して、非バイナリ文字列に変換します:mysql> SET @str = BINARY 'New York';mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4));+-------------+------------------------------------+| LOWER(@str) | LOWER(CONVERT(@str USING utf8mb4)) |+-------------+------------------------------------+| New York | new york |+-------------+------------------------------------+Unicode 文字セットの照合の場合、
LOWER()およびUPPER()は、照合名の Unicode 照合アルゴリズム (UCA) バージョン (存在する場合) および UCA 4.0.0 (バージョンが指定されていない場合) に従って動作します。 たとえば、utf8mb4_0900_ai_ciとutf8_unicode_520_ciはそれぞれ UCA 9.0.0 と 5.2.0 に従って動作し、utf8_unicode_ciは UCA 4.0.0 に従って動作します。セクション10.10.1「Unicode 文字セット」を参照してください。この関数はマルチバイトセーフです。
ビュー内で使用される
LCASE()は、LOWER()としてリライトされます。LPAD(str,len,padstr)len文字の長さになるように文字列padstrで左にパディングされた文字列strを返します。strがlenよりも長い場合は、戻り値はlen文字に短縮されます。mysql> SELECT LPAD('hi',4,'??'); -> '??hi'mysql> SELECT LPAD('hi',1,'??'); -> 'h'LTRIM(str)先頭の空白文字が削除された文字列
strを返します。mysql> SELECT LTRIM(' barbar'); -> 'barbar'この関数はマルチバイトセーフです。
MAKE_SET(bits,str1,str2,...)bitsセット内の対応するビットを持つ文字列で構成されるセット値 (,文字で区切られた部分文字列を含む文字列) を返します。str1はビット 0 に対応し、str2はビット 1 に対応する、などとなります。str1、str2、...内のNULL値は結果に追加されません。mysql> SELECT MAKE_SET(1,'a','b','c'); -> 'a'mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world'); -> 'hello,world'mysql> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world'); -> 'hello'mysql> SELECT MAKE_SET(0,'a','b','c'); -> ''MID(str,pos,len)MID(は、str,pos,len)SUBSTRING(のシノニムです。str,pos,len)OCT(N)Nの 8 進数の文字列表現を返します。Nは longlong (BIGINT) 数字です。 これは、CONV(と同等です。N,10.8)NがNULLである場合はNULLを返します。mysql> SELECT OCT(12); -> '14'OCTET_LENGTH(str)OCTET_LENGTH()はLENGTH()のシノニムです。ORD(str)文字列
strの左端の文字がマルチバイト文字である場合は、その文字のコードを返します。コードは、次の計算式を使用して、その構成要素の数値から計算されます。(1st byte code)+ (2nd byte code * 256)+ (3rd byte code * 256^2) ...左端の文字がマルチバイト文字でない場合は、
ORD()はASCII()関数と同じ値を返します。mysql> SELECT ORD('2'); -> 50POSITION(substrINstr)POSITION(はsubstrINstr)LOCATE(のシノニムです。substr,str)QUOTE(str)SQL ステートメントで、適切にエスケープされたデータ値として使用できる結果を生成する文字列を引用符で囲みます。 文字列は一重引用符で囲まれ、バックスラッシュ (
\)、一重引用符 (')、ASCIINULおよび Control+Z の各インスタンスの前にバックスラッシュが付いて返されます。 引数がNULLの場合の戻り値は、一重引用符で囲まれていない単語「NULL」 です。mysql> SELECT QUOTE('Don\'t!'); -> 'Don\'t!'mysql> SELECT QUOTE(NULL); -> NULL比較するために、セクション9.1.1「文字列リテラル」およびmysql_real_escape_string_quote()で、リテラル文字列に対する引用ルールと C API 内の引用ルールを参照してください。
REPEAT(str,count)count回繰り返された文字列strで構成される文字列を返します。countが 1 よりも小さい場合は、空の文字列を返します。strまたはcountがNULLである場合はNULLを返します。mysql> SELECT REPEAT('MySQL', 3); -> 'MySQLMySQLMySQL'REPLACE(str,from_str,to_str)文字列
from_strのすべての出現箇所が文字列to_strで置換された、文字列strを返します。REPLACE()は、from_strを検索する際に、大文字と小文字を区別した一致を実行します。mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww'); -> 'WwWwWw.mysql.com'この関数はマルチバイトセーフです。
REVERSE(str)文字の順序が逆になった文字列
strを返します。mysql> SELECT REVERSE('abc'); -> 'cba'この関数はマルチバイトセーフです。
RIGHT(str,len)文字列
strから右端のlen文字を返し、引数がNULLである場合はNULLを返します。mysql> SELECT RIGHT('foobarbar', 4); -> 'rbar'この関数はマルチバイトセーフです。
RPAD(str,len,padstr)len文字の長さになるように文字列padstrで右にパディングされた文字列strを返します。strがlenよりも長い場合は、戻り値はlen文字に短縮されます。mysql> SELECT RPAD('hi',5,'?'); -> 'hi???'mysql> SELECT RPAD('hi',1,'?'); -> 'h'この関数はマルチバイトセーフです。
RTRIM(str)末尾の空白文字が削除された文字列
strを返します。mysql> SELECT RTRIM('barbar '); -> 'barbar'この関数はマルチバイトセーフです。
SOUNDEX(str)strから soundex 文字列を返します。 ほぼ同じ発音の 2 つの文字列は、同じ soundex 文字列を持つはずです。 標準の soundex 文字列の長さは 4 文字ですが、SOUNDEX()関数は任意の長さの文字列を返します。 結果でSUBSTRING()を使用すると、標準の soundex 文字列を取得できます。str内のアルファベット以外の文字はすべて無視されます。 A から Z までの範囲外の国際アルファベット文字はすべて、母音として処理されます。重要SOUNDEX()の使用時には、次の制限に注意してください。現在実装されているこの関数は、文字列の言語が英語である場合にのみ機能するように設計されています。 その他の言語の文字列では、信頼できる結果が生成されない可能性があります。
この関数では、文字列でマルチバイト文字セット (
utf-8など) が使用されている場合に、整合性のある結果が生成されることは保証されません。 詳細は、Bug #22638 を参照してください。
mysql> SELECT SOUNDEX('Hello'); -> 'H400'mysql> SELECT SOUNDEX('Quadratically'); -> 'Q36324'注記この関数には、オリジナルの Soundex アルゴリズムが実装されています。より人気のある拡張バージョンではありません (この作成者も D. Knuth です)。 相違点としては、元のバージョンではまず母音が破棄されてから複製が破棄されますが、拡張バージョンではまず複製が破棄されてから母音が破棄されます。
expr1SOUNDS LIKEexpr2これは、
SOUNDEX(と同じです。expr1) = SOUNDEX(expr2)SPACE(N)N空白文字で構成される文字列を返します。mysql> SELECT SPACE(6); -> ' 'SUBSTR(,str,pos)SUBSTR(,strFROMpos)SUBSTR(,str,pos,len)SUBSTR(strFROMposFORlen)SUBSTR()はSUBSTRING()のシノニムです。SUBSTRING(,str,pos)SUBSTRING(,strFROMpos)SUBSTRING(,str,pos,len)SUBSTRING(strFROMposFORlen)len引数を付けない形式では、位置posで始まる文字列strからの部分文字列が返されます。len引数を付けた形式では、位置posで始まる文字列strからの部分文字列len文字長が返されます。FROMを使用する形式は、標準の SQL 構文です。 また、posに負の値を使用することもできます。 その場合、部分文字列の先頭は文字列の先頭でなく、文字列の末尾からのpos文字になります。 この関数のどの形式でも、posで負の値を使用できます。posの値が 0 の場合、空の文字列が返されます。すべての形式の
SUBSTRING()で、部分文字列の抽出が開始される文字列内の最初の文字の位置が1とみなされます。mysql> SELECT SUBSTRING('Quadratically',5); -> 'ratically'mysql> SELECT SUBSTRING('foobarbar' FROM 4); -> 'barbar'mysql> SELECT SUBSTRING('Quadratically',5,6); -> 'ratica'mysql> SELECT SUBSTRING('Sakila', -3); -> 'ila'mysql> SELECT SUBSTRING('Sakila', -5, 3); -> 'aki'mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2); -> 'ki'この関数はマルチバイトセーフです。
lenが 1 よりも小さい場合は、結果が空の文字列になります。SUBSTRING_INDEX(str,delim,count)文字列
strから、区切り文字delimがcount回出現する前の部分文字列を返します。countが正の値の場合は、(左から数えて) 最後の区切り文字の左側にあるすべてが返されます。countが負の値の場合は、(右から数えて) 最後の区切り文字の右側にあるすべてが返されます。SUBSTRING_INDEX()は、delimを検索する際に、大文字と小文字を区別した一致を実行します。mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); -> 'www.mysql'mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); -> 'mysql.com'この関数はマルチバイトセーフです。
TO_BASE64(str)文字列の引数を base-64 でエンコードされた形式に変換し、その結果を接続文字セットと照合順序が含まれる文字列として返します。 引数が文字列でない場合は、変換が実行される前に文字列に変換されます。 引数が
NULLである場合は、結果もNULLになります。FROM_BASE64()関数を使用すると、base-64 でエンコードされた文字列をデコードできます。mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc')); -> 'JWJj', 'abc'さまざまな base-64 エンコードスキームが存在します。 これらは、
TO_BASE64()およびFROM_BASE64()で使用されるエンコードおよびデコードのルールです。アルファベット値 62 のエンコードは
'+'です。アルファベット値 63 のエンコードは
'/'です。エンコードされた出力は、出力可能な 4 文字のグループで構成されます。 入力データの各 3 バイトは、4 文字を使用してエンコードされます。 最後のグループが不完全な場合は、長さが 4 になるまで
'='文字でパディングされます。長い出力を複数の行に分割するために、エンコードされた出力の各 76 文字の後ろに改行が追加されます。
デコードでは改行、復帰改行、タブ、および空白が認識および無視されます。
TRIM([{BOTH | LEADING | TRAILING} [,remstr] FROM]str)TRIM([remstrFROM]str)すべての
remstrプリフィクスまたはサフィクスが削除された文字列strを返します。BOTH、LEADING、TRAILINGのいずれの指定子も指定されない場合は、BOTHが指定されたとみなされます。remstrはオプションであり、指定されない場合は空白文字が削除されます。mysql> SELECT TRIM(' bar '); -> 'bar'mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -> 'barxxx'mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar'mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -> 'barx'この関数はマルチバイトセーフです。
UCASE(str)UCASE()はUPPER()のシノニムです。ビュー内で使用される
UCASE()は、UPPER()としてリライトされます。UNHEX(str)文字列の引数
strでは、UNHEX(は引数の各文字ペアを 16 進数として解釈し、その数字で表されたバイトに変換します。 戻り値はバイナリ文字列です。str)mysql> SELECT UNHEX('4D7953514C'); -> 'MySQL'mysql> SELECT X'4D7953514C'; -> 'MySQL'mysql> SELECT UNHEX(HEX('string')); -> 'string'mysql> SELECT HEX(UNHEX('1267')); -> '1267'引数文字列内の文字は、正当な 16 進数である必要があります:
'0'..'9'、'A'..'F'、'a'..'f'。 引数に 16 進以外の数字が含まれている場合は、結果がNULLになります。mysql> SELECT UNHEX('GG');+-------------+| UNHEX('GG') |+-------------+| NULL |+-------------+NULLの結果は、UNHEX()への引数がBINARYカラムの場合に発生することがあります。これは、格納時に値に0x00バイトが埋め込まれても、それらのバイトは取得時に削除されないためです。 たとえば、'41'は'41 'としてCHAR(3)カラムに格納され、'41'として取得されるため (末尾の空白が削除されます)、カラム値のUNHEX()はX'41'を返します。 対照的に、'41'は'41\0'としてBINARY(3)カラムに格納され、'41\0'として取得されます (後続パッド0x00バイトは削除されません)。'\0'は有効な 16 進数ではないため、カラム値のUNHEX()はNULLを返します。数値の引数
Nの場合、HEX(の逆はN)UNHEX()では実行されません。 代わりに、CONV(HEX(を使用してください。N),16,10)HEX()の説明を参照してください。UPPER(str)現在の文字セットのマッピングに従って、すべての文字が大文字に変更された文字列
strを返します。 デフォルトはutf8mb4です。mysql> SELECT UPPER('Hej'); -> 'HEJ'UPPER()にも適用される情報については、LOWER()の説明を参照してください。 これには、現在は機能が無効になっているバイナリ文字列 (BINARY、VARBINARY、BLOB) の大文字と小文字の変換を実行する方法に関する情報、および Unicode 文字セットの大文字と小文字の変換に関する情報が含まれていました。この関数はマルチバイトセーフです。
ビュー内で使用される
UCASE()は、UPPER()としてリライトされます。WEIGHT_STRING(str[AS {CHAR|BINARY}(N)] [flags])この関数は、入力文字列の重み文字列を返します。 戻り値は、文字列の比較およびソート値を表すバイナリ文字列です。 これらのプロパティーがあります。
WEIGHT_STRING(=str1)WEIGHT_STRING(の場合は、str2)です (str1=str2str1とstr2は等しいとみなされます)。WEIGHT_STRING(<str1)WEIGHT_STRING(の場合は、str2)です (str1<str2str1はstr2の前にソートされます)。
WEIGHT_STRING()は、内部使用を目的としたデバッグ機能です。 その動作は、MySQL のバージョン間で予告なしに変更できます。 これは、特に新しい照合を追加する場合に、照合のテストおよびデバッグに使用できます。セクション10.14「文字セットへの照合順序の追加」を参照してください。このリストには、引数が簡単にまとめられています。 詳細は、リストの後の説明を参照してください。
str: 入力文字列式。AS句: オプション。入力文字列を指定された型と長さにキャストします。flags: Optional; unused.
入力文字列
strは文字列式です。 入力が非バイナリ (文字) 文字列 (CHAR、VARCHAR、TEXT値など) である場合は、戻り値に文字列の照合順序重みが含まれます。 入力がバイナリ (バイト) 文字列 (BINARY、VARBINARY、BLOB値など) である場合は、戻り値は入力と同じです (バイナリ文字列のバイトごとの重みはバイト値です)。 入力がNULLである場合は、WEIGHT_STRING()はNULLを返します。例:
mysql> SET @s = _utf8mb4 'AB' COLLATE utf8mb4_0900_ai_ci;mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));+------+---------+------------------------+| @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) |+------+---------+------------------------+| AB | 4142 | 1C471C60 |+------+---------+------------------------+mysql> SET @s = _utf8mb4 'ab' COLLATE utf8mb4_0900_ai_ci;mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));+------+---------+------------------------+| @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) |+------+---------+------------------------+| ab | 6162 | 1C471C60 |+------+---------+------------------------+mysql> SET @s = CAST('AB' AS BINARY);mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));+------+---------+------------------------+| @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) |+------+---------+------------------------+| AB | 4142 | 4142 |+------+---------+------------------------+mysql> SET @s = CAST('ab' AS BINARY);mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s));+------+---------+------------------------+| @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) |+------+---------+------------------------+| ab | 6162 | 6162 |+------+---------+------------------------+上記の例では、
HEX()を使用してWEIGHT_STRING()の結果を表示しています。 結果はバイナリ値であるため、結果に出力されない値が含まれるときに出力可能な形式で表示する際に、HEX()が特に役立ちます。mysql> SET @s = CONVERT(X'C39F' USING utf8) COLLATE utf8_czech_ci;mysql> SELECT HEX(WEIGHT_STRING(@s));+------------------------+| HEX(WEIGHT_STRING(@s)) |+------------------------+| 0FEA0FEA |+------------------------+非
NULLの戻り値では、長さがVARBINARYの最大長内である場合は、値のデータ型がVARBINARYであり、その他の場合はデータ型はBLOBです。入力文字列を非バイナリまたはバイナリの文字列にキャストし、強制的に指定した長さになるように、
AS句が指定されている場合があります。AS CHAR(は、文字列を非バイナリ文字列にキャストし、N)N文字の長さになるように空白文字で右側をパディングします。Nは少なくとも 1 にする必要があります。Nが入力文字列の長さよりも小さい場合は、文字列がN文字まで切り捨てられます。 切り捨てられても警告は発生しません。AS BINARY(は、文字列がバイナリ文字列にキャストされ、N)Nが (文字単位ではなく) バイト単位で測定され、パディングで (空白文字でななく)0x00バイトが使用される点を除いて同様です。
mysql> SET NAMES 'latin1';mysql> SELECT HEX(WEIGHT_STRING('ab' AS CHAR(4)));+-------------------------------------+| HEX(WEIGHT_STRING('ab' AS CHAR(4))) |+-------------------------------------+| 41422020 |+-------------------------------------+mysql> SET NAMES 'utf8';mysql> SELECT HEX(WEIGHT_STRING('ab' AS CHAR(4)));+-------------------------------------+| HEX(WEIGHT_STRING('ab' AS CHAR(4))) |+-------------------------------------+| 0041004200200020 |+-------------------------------------+mysql> SELECT HEX(WEIGHT_STRING('ab' AS BINARY(4)));+---------------------------------------+| HEX(WEIGHT_STRING('ab' AS BINARY(4))) |+---------------------------------------+| 61620000 |+---------------------------------------+現在、
flags句は使用されていません。