文字列関数では、結果が
max_allowed_packet
サーバパラメータの設定より長くなると、NULL
が返ります。 See 項5.5.2. 「サーバパラメータのチューニング」。
文字列の位置を処理する関数では、最初の位置は 1 として番号付けされます。
ASCII(str)
文字列 str
の左端の文字の ASCII
コード値を返す。str
が空の文字列のときは 0
を返す。str
が
NULL
のときは NULL
を返す。
mysql>SELECT ASCII('2');
-> 50 mysql>SELECT ASCII(2);
-> 50 mysql>SELECT ASCII('dx');
-> 100
ORD()
関数も参照。
BIN(N)
longlong
(BIGINT
)型の数値である
N
のバイナリの文字列式を返す。これは
CONV(N,10,2)
と同じ。N
が NULL
のときは NULL
を返す。
mysql> SELECT BIN(12);
-> '1100'
BIT_LENGTH(str)
文字列 str
の長さをビットで返す。
mysql> SELECT BIT_LENGTH('text');
-> 32
CHAR(N,...)
引数を整数として解釈し、それらの整数の
ASCII
コード値で表現された文字から成る文字列を返す。NULL
値はスキップされる。
mysql>SELECT CHAR(77,121,83,81,'76');
-> 'MySQL' mysql>SELECT CHAR(77,77.3,'77.3');
-> 'MMM'
CHAR_LENGTH(str)
文字列 str
の長さ(文字数)を返す。
マルチバイト文字は 1 文字とみなされる。
したがって、5
個のマルチバイト文字で構成される文字列の場合、LENGTH()
では 10
が返るが、CHAR_LENGTH()
では
5
が返る。
CHARACTER_LENGTH(str)
CHARACTER_LENGTH()
は
CHAR_LENGTH()
のシノニム。
CONCAT(str1,str2,...)
引数を連結した結果の文字列を返す。いずれかの引数が
NULL
のときは NULL
を返す。3 つ以上の引数の指定が可能。
数値型の引数は同等の文字列形式に変換される。
mysql>SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL' mysql>SELECT CONCAT('My', NULL, 'QL');
-> NULL mysql>SELECT CONCAT(14.3);
-> '14.3'
CONCAT_WS(separator, str1, str2,...)
CONCAT_WS()
は
CONCAT()
の特殊型で、区切り文字付きの CONCAT(CONCAT
With
Separator)。最初の引数は残りの引数の区切り文字である。
この区切り文字は連結する各文字列の間に挿入される。
区切り文字は残りの引数同様、文字列として指定することができる。区切り文字が
NULL
の場合、結果は
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'
MySQL 4.1.1 より前のバージョンの
CONCAT_WS()
では、NULL
値だけでなく、空の文字列もスキップされる。
CONV(N,from_base,to_base)
数値を、進数の異なる数値に変換する。数値
N
を from_base
進数から to_base
進数に変換した数値の文字列表現を返す。いずれかの引数が
NULL
のときは NULL
を返す。 引数 N
は整数として解釈されるが、整数または文字列として指定することができる。最小の進数は
2
で、最大の進数は
36
。to_base
が負数の場合、N
は符号付きの数値とみなされる。それ以外の場合、N
は符号なしの数値として処理される。CONV
は 64 ビットの精度で動作する。
mysql>SELECT CONV("a",16,2);
-> '1010' mysql>SELECT CONV("6E",18,8);
-> '172' mysql>SELECT CONV(-17,10,-18);
-> '-H' mysql>SELECT CONV(10+"10"+'10'+0xa,10,10);
-> '40'
ELT(N,str1,str2,str3,...)
N
= 1
のときは
str1
を返し、N
=
2
のときは str2
を返す(以下同様)。N
が
1
より小さいか、引数の数より大きい場合は、NULL
を返す。ELT()
は
FIELD()
の逆。
mysql>SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
-> 'ej' mysql>SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
-> 'foo'
EXPORT_SET(bits,on,off,[separator,[number_of_bits]])
'bits' に指定された数値に対し、1 のビットを 'on' で指定された文字列で表現し、0 のビットを 'off' で指定された文字列で表現した文字列を返す。各文字列の間は 'separator' に指定された区切り文字'(デフォルトは ',')で区切られ、'number_of_bits' に指定されたビット数(デフォルトは 64)だけが表示される。
mysql> SELECT EXPORT_SET(5,'Y','N',',',4)
-> Y,N,Y,N
FIELD(str,str1,str2,str3,...)
str1
, str2
,
str3
, ...
リスト内の str
のインデックスを返す。 str
が検出されない場合は 0
を返す。 FIELD()
は
ELT()
の逆。
mysql>SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 2 mysql>SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 0
FIND_IN_SET(str,strlist)
N
個の部分文字列で構成されるリスト
strlist
に、文字列
str
が含まれている場合は、1
から
N
までのいずれかの値を返す。文字列のリストは、それぞれの間を
‘,
’
文字で区切られた各部分文字列で構成される文字列である。最初の引数が定数文字列で、2
番目の引数が SET
型のカラムの場合、FIND_IN_SET()
関数はビット演算を使用するよう最適化される。
str
が strlist
に含まれていない場合や、strlist
が空の文字列の場合は、0
を返す。どちらの引数も NULL
の場合は、NULL
を返す。
最初の引数にカンマ
‘,
’
が含まれていると、この関数は正しく動作しない。
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
HEX(N_or_S)
N_OR_S
が数値の場合、longlong(BIGINT
)型の数値である
N
の 16
進値の文字列表現を返す。 これは
CONV(N,10,16)
と同じ。
N_OR_S が文字列の場合は、N_OR_S の各文字を 2
桁の 16 進数に変換した N_OR_S の 16
進文字列を返す。これは 0xff
文字列の逆。
mysql>SELECT HEX(255);
-> 'FF' mysql>SELECT HEX("abc");
-> 616263 mysql>SELECT 0x616263;
-> "abc" mysql>SELECT HEX('あ');
-> 'A4A2' ; # 注意 EUC-JP コードでの結果
INSERT(str,pos,len,newstr)
str
内の、位置
pos
から始まる長さ
len
の部分文字列を文字列
newstr
に置き換えた文字列を返す。
mysql>SELECT INSERT('Quadratic', 3, 4, 'What');
-> 'QuWhattic' mysql>SELECT INSERT('あいうえお', 3, 2, 'か');
-> あいかお
この関数はマルチバイト文字に対応している。
INSTR(str,substr)
文字列 str
に最初に出現する部分文字列
substr
の位置を返す。これは
LOCATE()
の 2
つの引数を使用する形式と同じだが、引数の順序が入れ替わっている。
mysql>SELECT INSTR('foobarbar', 'bar');
-> 4 mysql>SELECT INSTR('xbar', 'foobar');
-> 0 mysql>SELECT INSTR('あいうえお', 'う');
-> 3
この関数はマルチバイト文字に対応している。 MySQL 3.23 では、この関数では大文字と小文字が区別されるが(ケース依存)、バージョン 4.0 では、どちらかの引数がバイナリ文字列の場合にのみケース依存になる。
LCASE(str)
LCASE()
は LOWER()
のシノニム。
LEFT(str,len)
文字列 str
の左端にある長さ
len
の文字を返す。
mysql>SELECT LEFT('foobarbar', 5);
-> 'fooba' mysql>SELECT LEFT('あいうえお', 2);
-> 'あい'
LENGTH(str)
文字列 str
の長さ(バイト)を返す。1個のマルチバイト文字は複数バイトになる。
したがって、5 個の 2
バイト文字で構成される文字列の場合、LENGTH()
では 10
が返るが、CHAR_LENGTH()
では
5
が返る。
mysql>SELECT LENGTH('text');
-> 4 mysql>SELECT LENGTH('あいうえお');
-> 10
LOAD_FILE(file_name)
ファイルを読み取り、ファイルの内容を文字列として返す。ファイルはサーバ上に存在しなければならず、ファイルのフルパス名を指定する必要がある。また、FILE
権限が必要となる。ファイルは全ユーザが読み取り可能でなければならず、max_allowed_packet
より小さいサイズでなければならない。
ファイルが存在しない場合や、上記の理由のいずれかによって読み取り不可能な場合、この関数は
NULL
を返す。
mysql> UPDATE tbl_name
SET blob_column=LOAD_FILE("/tmp/picture")
WHERE id=1;
MySQL バージョン 3.23
以外のバージョンを使用している場合は、ファイルの読み取りをアプリケーション内で行い、その後
INSERT/UPDATE
ステートメントを作成して、アプリケーションからデータベースにファイルの内容を書き出す必要がある。MySQL++
ライブラリを使用している場合は、これを行う方法の
1 つを
http://www.mysql.com/documentation/mysql++/mysql++-examples.html
で参照できる。
LOCATE(substr,str)
,
LOCATE(substr,str,pos)
最初の構文は、文字列 str
に最初に出現する部分文字列
substr
の位置を返す。 2
番目の構文は、文字列 str
の位置 pos
以降に最初に出現する部分文字列
substr
の位置を返す。
str
内に substr
が存在しない場合は 0
を返す。
mysql>SELECT LOCATE('bar', 'foobarbar');
-> 4 mysql>SELECT LOCATE('xbar', 'foobar');
-> 0 mysql>SELECT LOCATE('bar', 'foobarbar',5);
-> 7 mysql>SELECT LOCATE('え', 'あいうえおうえ');
-> 4 mysql>SELECT LOCATE('え', 'あいうえおうえ', 5);
-> 7
この関数はマルチバイト文字に対応している。 MySQL 3.23 では、この関数では大文字と小文字が区別されるが(ケース依存)、バージョン 4.0 では、どちらかの引数がバイナリ文字列の場合にのみケース依存になる。
LOWER(str)
str
のすべての文字を現在のキャラクタセット(デフォルトは
ISO-8859-1
Latin1)のマッピングに基づいて小文字に変更した文字列を返す。
mysql>SELECT LOWER('QUADRATICALLY');
-> 'quadratically' mysql>SELECT LOWER('あいうえお');
-> 'あいうえお'
この関数はマルチバイト文字に対応している。
LPAD(str,len,padstr)
文字列 str
が len
に指定された長さの文字になるよう、str
の左側に文字列 padstr
を埋め込んだ文字列を返す。str
が len
より長い場合は、戻り値は len
の長さの文字に縮められる。
mysql>SELECT LPAD('hi',4,'??');
-> '??hi' #バージョン4.1以上では以下のようになります。 mysql>SELECT LPAD('あいう', 5 , 'X');
-> 'XXあいう' #バージョン4.1未満では以下のようになります。 mysql>SELECT LPAD('あいう', 8 , 'X');
-> 'XXあいう' mysql>SELECT LPAD('あいう', 8 , 'お');
-> 'おあいう' mysql>SELECT LPAD('あいう', 5 , 'X');
-> 'あい ' ; #注意。最後は1byte
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(0,'a','b','c');
-> ''
MID(str,pos,len)
MID(str,pos,len)
は
SUBSTRING(str,pos,len)
のシノニム。
OCT(N)
longlong 型の数値である N
の 8
進値の文字列表現を返す。これは
CONV(N,10,8)
と同じ。
N
が NULL
のときは NULL
を返す。
mysql> SELECT OCT(12);
-> '14'
OCTET_LENGTH(str)
OCTET_LENGTH()
は
LENGTH()
のシノニム。
ORD(str)
文字列 str
の左端の文字がマルチバイト文字の場合に、次の式を使用して計算した、その文字を構成する各文字の
ASCII
コード値を返す。((最初のバイトの
ASCII コード)*256+(2 番目のバイトの ASCII
コード))[*256+3 番目のバイトの ASCII
コード...]
左端の文字がマルチバイト文字でないときは、ASCII()
関数を使用した場合と同じ値を返す。
mysql>SELECT ORD('2');
-> 50 mysql>SELECT ORD('あ');
-> 42146 ; #注意 EUC-JP コードでの結果
POSITION(substr IN str)
POSITION(substr IN str)
は
LOCATE(substr,str)
のシノニム。
QUOTE(str)
指定された文字列を、SQL
ステートメントで正しいエスケープデータ値として使用できるように引用符で囲んだ文字列を返す。結果の文字列は単一引用符で囲まれ、文字列内に単一引用符(‘'
’)、バックスラッシュ(‘\
’)、ASCII
NUL、Control-Z
が含まれている場合はその直前にバックスラッシュが挿入される。引数が
NULL
の場合は、``NULL''
という語が単一引用符で囲まれずに返される。
QUOTE()
関数は MySQL バージョン
4.0.3 で追加された。
mysql>SELECT QUOTE("Don't");
-> 'Don\'t!' mysql>SELECT QUOTE(NULL);
-> NULL
REPEAT(str,count)
文字列 str
を、count
に指定された回数だけ繰り返した文字列を返す。count
<= 0
の場合は、空の文字列を返す。str
または count
が
NULL
の場合は、NULL
を返す。
mysql>SELECT REPEAT('MySQL', 3);
-> 'MySQLMySQLMySQL' mysql>SELECT REPEAT('げ', 3);
-> 'げげげ'
REPLACE(str,from_str,to_str)
文字列 str
に含まれる文字列
from_str
をすべて文字列
to_str
に置換した文字列を返す。
mysql>SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com' mysql>SELECT REPLACE('あいあいうえお', 'い', 'す');
-> 'あすあすうえお'
この関数はマルチバイト文字に対応している。
REVERSE(str)
文字列 str
内の文字の順序を逆にした文字列を返す。
mysql>SELECT REVERSE('abc');
-> 'cba' mysql>SELECT REVERSE('あいうえお');
-> 'おえういあ'
この関数はマルチバイト文字に対応している。
RIGHT(str,len)
文字列 str
の右端にある長さ
len
の文字を返す。
mysql>SELECT RIGHT('foobarbar', 4);
-> 'rbar' mysql>SELECT RIGHT('あいうえお', 4);
-> 'いうえお'
この関数はマルチバイト文字に対応している。
RPAD(str,len,padstr)
文字列 str
が len
に指定された長さの文字になるよう、str
の右側に文字列 padstr
を埋め込んだ文字列を返す。str
が len
より長い場合は、戻り値は len
の長さの文字に縮められる。
mysql>SELECT RPAD('hi',5,'?');
-> 'hi???' #バージョン4.1以上では以下のようになります。 mysql>SELECT RPAD('あい', 5, 'う');
-> 'あいううう' #バージョン4.1未満では以下のようになります。 mysql>SELECT RPAD('あい', 5, 'X');
-> 'あいX' mysql>SELECT RPAD('あい', 5, 'う');
-> 'あい ' ; # 注意: 最後はマルチバイト文字の上位1byte
RTRIM(str)
文字列 str
から後続のスペース文字を削除した文字列を返す。
mysql> SELECT RTRIM('barbar ');
-> 'barbar'
この関数はマルチバイト文字に対応している。
SOUNDEX(str)
文字列 str
の soundex
文字列を返す。発音が似通った 2
つの文字列の soundex
文字列は同じものになる。標準の soundex
文字列の長さは 4
文字だが、SOUNDEX()
関数は任意の長さの文字列を返す。返された値に対して
SUBSTRING()
を使用すると、標準の soundex
文字列が得られる。指定された文字列内の英数字以外の文字は無視される。A
〜 Z
の範囲外の各国語のアルファベット文字はすべて母音として扱われる。
mysql>SELECT SOUNDEX('Hello');
-> 'H400' mysql>SELECT SOUNDEX('Quadratically');
-> 'Q36324'
expr1 SOUNDS LIKE expr2
SOUNDEX(expr1)=SOUNDEX(expr2)
と同じ(バージョン 4.1
以降でのみ利用可能)。
SPACE(N)
N
に指定された数のスペース文字で構成される文字列を返す。
mysql> SELECT SPACE(6);
-> ' '
SUBSTRING(str,pos)
,
SUBSTRING(str FROM pos)
,
SUBSTRING(str,pos,len)
,
SUBSTRING(str FROM pos FOR len)
len
引数のない形式の場合は、文字列
str
内の位置 pos
以降の部分文字列を返す。 len
引数のある形式の場合は、文字列
str
の位置 pos
以降の、len
に指定された長さの部分文字列を返す。
FROM
を使用する形式は SQL-92
の構文。
mysql>SELECT SUBSTRING('Quadratically',5);
-> 'ratically' mysql>SELECT SUBSTRING('foobarbar' FROM 4);
-> 'barbar' mysql>SELECT SUBSTRING('Quadratically',5,6);
-> 'ratica' mysql>SELECT SUBSTRING('あいうえおかきくけこ', 5);
-> 'おかきくけこ'
この関数はマルチバイト文字に対応している。
SUBSTRING_INDEX(str,delim,count)
文字列 str
から、delim
に指定された区切り記号の
count
個目の出現位置の直前までの部分文字列を返す。
count
に指定された数が正数の場合は、(左から数えて)指定された数の最後の区切り記号の左側にあるすべての文字を返す。
count
に指定された数が負数の場合は、(右から数えて)指定された数の最後の区切り記号の右側にあるすべての文字を返す。
mysql>SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql' mysql>SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com' mysql>SELECT SUBSTRING_INDEX('あいんうえおんかき', 'ん', 2);
-> 'あいんうえお' mysql>SELECT SUBSTRING_INDEX('あいんうえおんかき', 'ん', -2);
-> 'うえおんかき'
この関数はマルチバイト文字に対応している。
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM]
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' mysql>SELECT TRIM(BOTH 'お' FROM 'おあいうえお');
-> 'あいうえ'
この関数はマルチバイト文字に対応している。
UCASE(str)
UCASE()
は UPPER()
のシノニム。
UPPER(str)
str
のすべての文字を現在のキャラクタセット(デフォルトは
ISO-8859-1
Latin1)のマッピングに基づいて大文字に変更した文字列を返す。
mysql>SELECT UPPER('Hej');
-> 'HEJ' mysql>SELECT UPPER('へい');
-> 'へい'
この関数はマルチバイト文字に対応している。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.