文字列値の関数は、結果の長さが
max_allowed_packet
システム環境変数より長くなると、NULL
を返します。項6.5.2. 「サーバパラメータのチューニング」
を参照してください。
ストリングの位置を演算する関数では、最初の位置は 1 と数値付けられます。
ストリング str
の左側の文字の数値を戻します。str
が空のストリングである場合は、0
を戻します。str
が
NULL
である場合は
NULL
を戻します。ASCII()
は、0
から 255
の数値を持つ文字に使用できます。
mysql>SELECT ASCII('2');
-> 50 mysql>SELECT ASCII(2);
-> 50 mysql>SELECT ASCII('dx');
-> 100
ORD()
関数も併せてご参照ください。
N
のバイナリ値の文字列表現を戻します。N
は longlong ( BIGINT
)
数字です。これは、CONV(
に等価になります。N
,10,2)N
が
NULL
である場合は
NULL
を戻します。
mysql> SELECT BIN(12);
-> '1100'
ストリング str
の長さをビットで戻します。
mysql> SELECT BIT_LENGTH('text');
-> 32
CHAR(
N
,... [USING
charset_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(0x65)), CHARSET(CHAR(0x65 USING utf8));
+---------------------+--------------------------------+
| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |
+---------------------+--------------------------------+
| binary | utf8 |
+---------------------+--------------------------------+
USING
が与えられ、結果ストリングが与えられた文字セットにとって不当になる場合は、警告が発行されます。また、厳密な
SQL
モードが有効にされた場合は、CHAR()
からの結果は NULL
になります。
文字で測られたストリング
str
の長さを戻します。マルチバイト文字は、1
文字として数えられます。つまり、2
バイトの文字を 5
つ含むストリングには、CHAR_LENGTH()
は 5
を戻すところを、LENGTH()
は
10
を戻します。
CHARACTER_LENGTH()
is a synonym for
CHAR_LENGTH()
.
引数を連結した結果であるストリングを戻します。ひとつ以上の引数を持つ場合があります。すべての引数が非バイナリ ストリングである場合、結果は非バイナリ ストリングになります。引数がひとつでもバイナリ ストリングを含む場合は、結果はバイナリ ストリングになります。数値の引数はそれに等しいバイナリ ストリング形態に変換されます。それを避けたい場合は、次の例のように、明示的なタイプ キャストを使用することができます :
SELECT CONCAT(CAST(int_col
AS CHAR),char_col
);
引数のどれかが NULL
である場合、CONCAT()
は
NULL
を戻します。
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()
は 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
値はすべてとばします。
異なる基数間の数値を変換します。基数
rom_base
から基数
to_base
に変換された、数値
N
の文字列表現を戻します。引数のどれかが
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'
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
の各ビットセットには on
ストリングが返され、各再生ビットには
off
が返されます。bits
のビットは右から左に検査されます (
下位ビットから上位ビット )
。ストリングは、separator
ストリング ( デフォルトはコンマ
‘,
’ )
で区切られた結果の左から右意へ追加されます。検査されたビットの数は
number_of_bits
によって与えられます ( デフォルトでは 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'
str1
、str2
、str3
、...
リストの
str
の開始位置 (
ポジション )
を戻します。str
が見つからない場合は、0
を戻します。
FIELD()
へのすべての引数がストリングの場合、すべての引数はストリングとして比較されます。すべての引数が数値の場合、それらは数値として比較されます。それ以外は、引数は
double として比較されます。
str
が NULL
である場合、NULL
はいかなる値との比較でも等価にならないため、戻り値は
0
になります。FIELD()
は
ELT()
の補数です。
mysql>SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 2 mysql>SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 0
ストリング 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');
-> 2
数字 X
を
'#,###,###.##'
のようにフォーマットし、D
少数位まで丸め、その結果をストリングとして戻します。D
が 0
の場合、結果は小数点または小数部を持ちません。
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'
N_or_S
が数字の場合、N
の 16
進値の文字列表現を戻します。N
は longlong ( BIGINT
)
数です。これは、CONV(
に等価になります。
N
,10,16)
N_or_S
がストリングの場合は、N_or_S
の各文字が二桁の 16
進数に変換される、N_or_S
の 16 進数字列表現を戻します。
mysql>SELECT HEX(255);
-> 'FF' mysql>SELECT 0x616263;
-> 'abc' mysql>SELECT HEX('abc');
-> 616263
ストリング str
を、位置
pos
で始まるサブストリングと、ストリング
newstr
に置換された
len
文字長と共に戻します。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'
この関数はマルチバイトでも安全です。
ストリング str
内のサブストリング substr
の最初の発生の位置を戻します。これは、LOCATE()
の引数がふたつのフォームの、引数の順番が逆になったものとと同じですが、
mysql>SELECT INSTR('foobarbar', 'bar');
-> 4 mysql>SELECT INSTR('xbar', 'foobar');
-> 0
この関数はマルチバイトでも安全で、少なくともひとつの引数がバイナリ ストリングである場合は、大文字小文字の区別が必須です。
LCASE()
is a synonym for
LOWER()
.
ストリング str
からの左側の len
文字を戻し、引数が NULL
である場合は NULL
を戻します。
mysql> SELECT LEFT('foobarbar', 5);
-> 'fooba'
バイトで測られたストリング
str
の長さを戻します。マルチバイト文字は、複数バイトとして数えられます。つまり、2
バイトの文字を 5
つ含むストリングには、CHAR_LENGTH()
は 5
を戻すところを、LENGTH()
は
10
を戻します。
mysql> SELECT LENGTH('text');
-> 4
ファイルを読み取り、その内容をストリングとして戻します。この関数を使用するには、ファイルがサーバホストに置かれていなければならないのと、ファイルへのフルパス名を特定し、FILE
権限を持つ必要があります。ファイルはあらゆる点で読取可能でなければならず、max_allowed_packet
バイトより小さなサイズである必要があります。
ファイルが存在しない場合、または、上記の条件が満たされておらず、読取が不可能な場合、この関数は
NULL
を戻します。
MySQL 5.1.6
からは、character_set_filesystem
システム環境変数が、リテラル
ストリングとして与えられたファイル名の解釈をコントロールします。
mysql>UPDATE t
SET blob_col=LOAD_FILE('/tmp/picture')
WHERE id=1;
LOCATE(
,
substr
,str
)LOCATE(
substr
,str
,pos
)
最初の構文は、ストリング
str
内のサブストリング
substr
の最初の発生の位置を戻します。2
番目の構文は、位置 pos
で始まるストリング str
内のサブストリング substr
の最初の発生の位置を戻します。str
内に substr
がない場合は
0
を戻します。
mysql>SELECT LOCATE('bar', 'foobarbar');
-> 4 mysql>SELECT LOCATE('xbar', 'foobar');
-> 0 mysql>SELECT LOCATE('bar', 'foobarbar', 5);
-> 7
この関数はマルチバイトでも安全で、少なくともひとつの引数がバイナリ ストリングである場合は、大文字小文字の区別が必須です。
現在の文字セットのマッピングに基づいてすべての文字が小文字に変更されたストリング
str
を戻します。デフォルトは latin1
( cp1252 West European ) です。
mysql> SELECT LOWER('QUADRATICALLY');
-> 'quadratically'
この関数はマルチバイトでも安全です。
len
文字の長さへ、ストリング
padstr
で左にパッドされたストリング
str
を戻します。str
が
len
より長い場合は、戻り値は
len
文字に縮められます。
mysql>SELECT LPAD('hi',4,'??');
-> '??hi' mysql>SELECT LPAD('hi',1,'??');
-> 'h'
頭のスペース文字を除いたストリング
str
を戻します。
mysql> SELECT LTRIM(' barbar');
-> 'barbar'
この関数はマルチバイトでも安全です。
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
)SUBSTRING(
のシノニムです。
str
,pos
,len
)
N
の 8
進数の文字列表現を戻します。N
は longlong ( BIGINT
)
数字です。これは、CONV(
に等価になります。N
,100.8)N
が
NULL
である場合は
NULL
を戻します。
mysql> SELECT OCT(12);
-> '14'
OCTET_LENGTH()
は
LENGTH()
のシノニムです。
ストリング str
の左端の文字がマルチバイト文字の場合は、次の公式を使ってその構成バイトの数値から計算された、その文字のコードを戻します
:
(1st byte code) + (2nd byte code × 256) + (3rd byte code × 2562) ...
左端の文字がマルチバイト文字でない場合は、ORD()
は ASCII()
関数と同じ値を戻します。
mysql> SELECT ORD('2');
-> 50
POSITION(
は
substr
IN
str
)LOCATE(
のシノニムです。
substr
,str
)
SQL
文で、適切にエスケープされたデータ値として使用できる結果を生成するストリングを引用します。ストリングは単一引用符で囲まれ、単一引用符
( ‘'
’ )
、バックスラッシュ (
‘\
’ ) 、ASCII
NUL
、そして
バックスラッシュによって先行された Control-Z
の各インスタンスと共に戻されます。引数が
NULL
の場合は、戻り値は単一引用符の囲みなしの語句
「NULL」 になります。
mysql>SELECT QUOTE('Don\'t!');
-> 'Don\'t!' mysql>SELECT QUOTE(NULL);
-> NULL
count
回繰り返されたストリング
str
で構成されるストリングを戻します。count
が 1
より小さい場合は、空のストリングを戻します。str
もしくは count
が
NULL
である場合は
NULL
を戻します。
mysql> SELECT REPEAT('MySQL', 3);
-> 'MySQLMySQLMySQL'
ストリング to_str
によって置換されたストリング
from_str
のすべての発生と共に、ストリング
str
を戻します。REPLACE()
は、from_str
を検索する際、大文字小文字を区別した検出を行います。
mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
この関数はマルチバイトでも安全です。
文字の順序が逆になったストリング
str
を戻します。
mysql> SELECT REVERSE('abc');
-> 'cba'
この関数はマルチバイトでも安全です。
ストリング str
からの右側の len
文字を戻し、引数が NULL
である場合は NULL
を戻します。
mysql> SELECT RIGHT('foobarbar', 4);
-> 'rbar'
この関数はマルチバイトでも安全です。
len
文字の長さへ、ストリング
padstr
で右にパッドされたストリング
str
を戻します。str
が
len
より長い場合は、戻り値は
len
文字に縮められます。
mysql>SELECT RPAD('hi',5,'?');
-> 'hi???' mysql>SELECT RPAD('hi',1,'?');
-> 'h'
この関数はマルチバイトでも安全です。
最後のスペース文字を除いたストリング
str
を戻します。
mysql> SELECT RTRIM('barbar ');
-> 'barbar'
この関数はマルチバイトでも安全です。
str
から soundex
ストリングを戻します。サウンドがほぼ同じなふたつのストリングは、同等の
soundex ストリングを持っています。標準の
soundex ストリングは長さ 4
文字ですが、SOUNDEX()
関数は任意の長さのストリングを戻します。標準の
soundex ストリングを得るには、結果に
SUBSTRING()
を使用することができます。str
内のすべての非アルファベット文字は無視されます。A
から Z
以外のすべての国際アルファベット文字は、母音として扱われます。
重要点 :
SOUNDEX()
を使用する場合は、次の制限に留意してください
:
現在実装されているこの関数は、英語言語のみとの作動が意図されています。多言語でのストリングは、正確な結果を生成できない場合があります。
この関数は、utf-8
を含むマルチバイト文字セットを使用するストリングでは、一貫性のある結果を提供する保証はありません。
今後のリリースでは、これらの制限をなくせるよう努力しています。詳細は Bug#22638 をご覧ください。
mysql>SELECT SOUNDEX('Hello');
-> 'H400' mysql>SELECT SOUNDEX('Quadratically');
-> 'Q36324'
注記 :この関数は、もっと一般的な拡張版ではなく、元来の Soundex アルゴリズムを実装しています。その相違点としては、元来のバージョンは最初に母音を破棄してから、複製を捨てますが、拡張版ではまず複製を破棄し、それから母音を捨てます。
これは、SOUNDEX(
と同様です。
expr1
)
= SOUNDEX(expr2
)
N
スペース文字で構成されるストリングを戻します。
mysql> SELECT SPACE(6);
-> ' '
SUBSTRING(
,
str
,pos
)SUBSTRING(
,
str
FROM
pos
)SUBSTRING(
,
str
,pos
,len
)SUBSTRING(
str
FROM
pos
FOR
len
)
len
引数なしのフォームは、位置
pos
ではじまる、ストリング
str
からのサブストリングを返します。len
引数を持つフォームは、位置
pos
ではじまる、ストリング
str
からのサブストリング
len
文字長を返します。FROM
を使用するフォームは標準の SQL
構文です。また、pos
にマイナス値を使用することも可能です。その場合、サブクエリの頭は、ストリングの最初でなく、ストリングの最後からの
pos
文字です。マイナス値は、この関数のあらゆるフォームで、pos
に使用することもできます。
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
以下の場合、結果は空のストリングになります。
SUBSTR()
は SUBSTRING()
のシノニムです。
SUBSTRING_INDEX(
str
,delim
,count
)
デリミッタ delim
の
count
発生前に、ストリング str
を戻します。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'
この関数はマルチバイトでも安全です。
TRIM([{BOTH | LEADING | TRAILING}
[
,
remstr
] FROM]
str
)TRIM([
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'
この関数はマルチバイトでも安全です。
UCASE()
は UPPER()
のシノニムです。
HEX(
の逆演算を行います。引数内の 16
進数のそれぞれのペアを数字として解釈し、それを数字で表される文字に変換します。結果としての文字はバイナリ
ストリングとして戻されます。
str
)
mysql>SELECT UNHEX('4D7953514C');
-> 'MySQL' mysql>SELECT 0x4D7953514C;
-> 'MySQL' mysql>SELECT UNHEX(HEX('string'));
-> 'string' mysql>SELECT HEX(UNHEX('1267'));
-> '1267'
引数ストリング内の文字は、正当な 16
進数である必要があります :
'0'
..
'9'
,
'A'
..
'F'
,
'a'
..
'f'
. UNHEX()
が引数内で非 16 進数に遭遇する場合は
NULL
を戻します :
mysql> SELECT UNHEX('GG');
+-------------+
| UNHEX('GG') |
+-------------+
| NULL |
+-------------+
NULL
という結果は、UNHEX()
への引数が BINARY
カラムである場合、値が保存される時に 0x00
バイトでパッドされるために起こりますが、これらのバイトは検索でストリップされません。例えば、'aa'
は 'aa '
として
CHAR(3)
カラムに保存され、'aa'
(
トレーリング パッド
スペースがストリップされた状態 )
として検索されます。それにより、カラム値の
UNHEX()
は A'
を戻します。それに対し、'aa'
は BINARY(3)
カラムに
'aa\0'
として保存され、'aa\0'
(
トレーリング パッド 0x00
バイトがストリップされていない常態で )
として検索されます。'\0'
は正当な 16 進数ではないので、カラム値の
UNHEX()
は NULL
を戻します。
現在の文字セットのマッピングに基づいてすべての文字が大文字に変更されたストリング
str
を戻します。デフォルトは latin1
( cp1252 West European ) です。
mysql> SELECT UPPER('Hej');
-> 'HEJ'
この関数はマルチバイトでも安全です。