MySQL内部関数文字列比較関数、正規表現
- 文字列のバイト数
- 文字列の文字数
- 文字列検索(文字列s中に部分文字列subが現われる位置)
- 文字列検索(文字列s中に部分文字列subが現われる位置)〔※マルチバイト対応〕
- 文字列検索(文字列s中の位置p以降に部分文字列subが現われる位置)〔※マルチバイト対応〕
- 部分文字列の取出(文字列sの左i文字)
- 部分文字列の取出(文字列sの右i文字)
- 部分文字列の取出(文字列の位置p以降の文字)〔※マルチバイト対応〕
- 部分文字列の取出(文字列の位置p以降のlen文字)〔※マルチバイト対応〕
- 部分文字列の取出(文字列をdelimで区切った左からcount個分の文字列)
- 文字列の左の空白文字を除去
- 文字列の右の空白文字を削除
- 文字列から特定の文字列を削除
- 長さlenになるまで文字列の左を文字列padstrで埋める
- 長さlenになるまで文字列の右を文字列padstrで埋める
- n個の空白文字
- 文字列の反復
- 文字列sのsoundex文字列
- n=1ならs1、n=2ならs2、・・・を返す
- s=s1なら1、s=s2なら2、・・・を返す
- 文字列中の位置
- ビットbに対応する文字リスト
- 数値のビット1を文字列on、ビット0を文字列offにし、区切り文字で区切った文字列を返す
- 文字列を小文字に変換〔※マルチバイト対応〕
- 文字列を大文字に変換〔※マルチバイト対応〕
- 文字列の置換
- 文字列の反転
- 文字列の位置posからlenバイト分をnewstrに置換〔※マルチバイト対応〕
- 文字列をエスケープ〔※MySQL 4.0.3~〕
- 文字列左端のASCIIコードを取得
- Nのバイナリ文字列式を取得
- 文字列ノ長さをビットで取得
- ASCIIコード→文字列に変換
- 数値→進数の異なる数値に変換
文字列のバイト数
unknown
文字列strの長さ(バイト数)を返します。 日本語1文字は2バイトとなります。 例えば、5個のバイト文字で構成される文字列は、この関数を使用すると「10」が返りますが、CHAR_LENGTH()関数を使用すると「5」が返ります。
mysql> SELECT LENGTH('あいうえお'); Enter +----------------------+ | LENGTH('あいうえお') | +----------------------+ | 10 | +----------------------+ 1 row in set (0.00 sec) mysql> SELECT LENGTH('aiueo'); Enter +-----------------+ | LENGTH('aiueo') | +-----------------+ | 5 | +-----------------+ 1 row in set (0.00 sec) # FirstNameフィールドとAgeフィールドのバイト数を取得 mysql> SELECT FirstName, LENGTH(FirstName), Age, LENGTH(Age) Enter > FROM tbl_Customer; Enter +-----------+-------------------+------+-------------+ | FirstName | LENGTH(FirstName) | Age | LENGTH(Age) | +-----------+-------------------+------+-------------+ | 花子 | 4 | 21 | 2 | | 太郎 | 4 | 30 | 2 | | 一郎 | 4 | 45 | 2 | | 萌子 | 4 | 18 | 2 | | 愛 | 2 | 21 | 2 | | 太郎 | 4 | 22 | 2 | | 花子 | 4 | 35 | 2 | +-----------+-------------------+------+-------------+ 7 rows in set (0.00 sec)
文字列の文字数
unknown
文字列strの長さ(文字数)を返します。 日本語は1文字とみなされます。 例えば日本語5文字の場合、LENGTH()関数を使用すると「10」が返りますが、この関数では「5」が返ります。
CHARACTER_LENGTH()関数は、CHAR_LENGTH()関数のシノニムです。
mysql> SELECT CHAR_LENGTH('あいうえお'); Enter +---------------------------+ | CHAR_LENGTH('あいうえお') | +---------------------------+ | 5 | +---------------------------+ 1 row in set (0.01 sec) mysql> SELECT CHAR_LENGTH('aiueo'); Enter +----------------------+ | CHAR_LENGTH('aiueo') | +----------------------+ | 5 | +----------------------+ 1 row in set (0.00 sec) # FirstNameフィールドとAgeフィールドの文字数を取得 mysql> SELECT FirstName, CHAR_LENGTH(FirstName), Age, CHAR_LENGTH(Age) Enter -> FROM tbl_Customer; Enter +-----------+------------------------+------+------------------+ | FirstName | CHAR_LENGTH(FirstName) | Age | CHAR_LENGTH(Age) | +-----------+------------------------+------+------------------+ | 花子 | 2 | 21 | 2 | | 太郎 | 2 | 30 | 2 | | 一郎 | 2 | 45 | 2 | | 萌子 | 2 | 18 | 2 | | 愛 | 1 | 21 | 2 | | 太郎 | 2 | 22 | 2 | | 花子 | 2 | 35 | 2 | +-----------+------------------------+------+------------------+ 7 rows in set (0.00 sec)
文字列検索(文字列s中に部分文字列subが現われる位置)
unknown
文字列str中に最初に現われる部分文字列substrの位置を返します。
部分文字列が見つからなかった場合は0を返します。
この関数は、LOCATE()関数の2つの引数を使用する形式と同じ動作をしますが、引数の順序が逆です。
mysql> SELECT INSTR('あいうえお', 'い'); Enter +---------------------------+ | INSTR('あいうえお', 'い') | +---------------------------+ | 2 | +---------------------------+ 1 row in set (0.00 sec) mysql> SELECT INSTR('abcde', 'b'); Enter +---------------------+ | INSTR('abcde', 'b') | +---------------------+ | 2 | +---------------------+ 1 row in set (0.00 sec)
文字列検索(文字列s中に部分文字列subが現われる位置)
※マルチバイト対応
unknown
文字列str中に、部分文字列substrが最初に見つかった位置を返します(先頭は1始まり)。 見つからなかった場合は0を返します。
POSITION(substr IN str)関数は、LOCATE(substr,str)関数のシノニムです。
# 「あいうえお」中に「い」が現われる最初の位置を取得 mysql> SELECT LOCATE('い','あいうえお'); Enter +---------------------------+ | LOCATE('い','あいうえお') | +---------------------------+ | 2 | +---------------------------+ 1 row in set (0.01 sec) # 「abcde」中に「b」が現われる最初の位置を取得 mysql> SELECT LOCATE('b', 'abcde'); Enter +---------------------+ | LOCATE('b','abcde') | +---------------------+ | 2 | +---------------------+ 1 row in set (0.00 sec)
文字列検索(文字列s中の位置p以降に部分文字列subが現われる位置)
※マルチバイト対応
unknown
文字列strの位置pos以降に、部分文字列substrが最初に見つかった位置を返します(先頭は1始まり)。 見つからなかった場合は0を返します。
# 「あいうえおあいうえお」の3文字目以降に、「い」が現われる最初の位置 mysql> SELECT LOCATE('い','あいうえおあいうえお',3); Enter +---------------------------------------+ | LOCATE('い','あいうえおあいうえお',3) | +---------------------------------------+ | 7 | +---------------------------------------+ 1 row in set (0.00 sec) # 「abcdeabcde」の3文字目以降に、「b」が現われる最初の位置 mysql> SELECT LOCATE('b','abcdeabcde',3); Enter +----------------------------+ | LOCATE('b','abcdeabcde',3) | +----------------------------+ | 7 | +----------------------------+ 1 row in set (0.00 sec)
部分文字列の取出(文字列sの左i文字)
unknown
文字列strの左端からlen文字分の文字列を返します。
この関数はマルチバイト対応のため、日本語も1文字としてカウントされます。
# 「あいうえお」の左から2文字分取り出す mysql> SELECT LEFT('あいうえお', 2); Enter +----------------------+ | LEFT('あいうえお',2) | +----------------------+ | あい | +----------------------+ 1 row in set (0.00 sec) # 「abcde」の左から2文字分を取り出す mysql> SELECT LEFT('abcde', 2); Enter +-----------------+ | LEFT('abcde',2) | +-----------------+ | ab | +-----------------+ 1 row in set (0.01 sec)
部分文字列の取出(文字列sの右i文字)
unknown
文字列strの右端からlen文字分の文字列を返します。
この関数はマルチバイト対応のため、日本語も1文字としてカウントされます。
# 「あいうえお」の右から2文字分取り出す mysql> SELECT RIGHT('あいうえお', 2); Enter +-----------------------+ | RIGHT('あいうえお',2) | +-----------------------+ | えお | +-----------------------+ 1 row in set (0.00 sec) # 「abcde」の右から2文字分を取り出す mysql> SELECT RIGHT('abcde', 2); Enter +------------------+ | RIGHT('abcde',2) | +------------------+ | de | +------------------+ 1 row in set (0.00 sec)
部分文字列の取出(文字列の位置p以降の文字)
※マルチバイト対応
unknown
文字列str内の位置pos以降の部分文字列を返します。
この関数はマルチバイト対応のため、日本語も1文字としてカウントされます。
# 「あいうえお」の2文字目から最後まで取り出す mysql> SELECT SUBSTRING('あいうえお', 2); Enter +---------------------------+ | SUBSTRING('あいうえお',2) | +---------------------------+ | いうえお | +---------------------------+ 1 row in set (0.00 sec) # 「abcde」の2文字目から最後まで取り出す mysql> SELECT SUBSTRING('abcde', 2); Enter +----------------------+ | SUBSTRING('abcde',2) | +----------------------+ | bcde | +----------------------+ 1 row in set (0.00 sec)
部分文字列の取出(文字列の位置p以降のlen文字)
※マルチバイト対応
unknown
文字列strの位置pos以降の 長さlen分の部分文字列を返します。
この関数はマルチバイト対応のため、日本語も1文字としてカウントされます。
MID(str,pos,len)関数は、SUBSTRING(str,pos,len)関数のシノニムです。
# 「あいうえお」の2文字目から3文字分取り出す mysql> SELECT SUBSTRING('あいうえお', 2, 3); Enter +-----------------------------+ | SUBSTRING('あいうえお',2,3) | +-----------------------------+ | いうえ | +-----------------------------+ 1 row in set (0.00 sec) # 「abcde」の2文字目から3文字分取り出す mysql> SELECT SUBSTRING('abcde', 2, 3); Enter +------------------------+ | SUBSTRING('abcde',2,3) | +------------------------+ | bcd | +------------------------+ 1 row in set (0.00 sec)
部分文字列の取出(文字列をdelimで区切った左からcount個分の文字列)
unknown
引数countに正の数を指定した場合
文字列str中に、区切り文字delimがcount番目に表れる位置より前の文字列を返します。
mysql> SELECT SUBSTRING_INDEX('あ/い/う/え/お', '/', 2); Enter +-------------------------------------------+ | SUBSTRING_INDEX('あ/い/う/え/お', '/', 2) | +-------------------------------------------+ | あ/い | +-------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT SUBSTRING_INDEX('a/b/c/d/e', '/', 2); Enter +--------------------------------------+ | SUBSTRING_INDEX('a/b/c/d/e', '/', 2) | +--------------------------------------+ | a/b | +--------------------------------------+ 1 row in set (0.00 sec)
引数countに負の数を指定した場合
文字列str中に、区切り文字delimがcount番目に表れる位置より後の文字列を返します。
mysql> SELECT SUBSTRING_INDEX('あ/い/う/え/お', '/', -2); Enter +--------------------------------------------+ | SUBSTRING_INDEX('あ/い/う/え/お', '/', -2) | +--------------------------------------------+ | え/お | +--------------------------------------------+ 1 row in set (0.29 sec) mysql> SELECT SUBSTRING_INDEX('a/b/c/d/e', '/', -2); Enter +---------------------------------------+ | SUBSTRING_INDEX('a/b/c/d/e', '/', -2) | +---------------------------------------+ | d/e | +---------------------------------------+ 1 row in set (0.00 sec)
文字列の左の空白文字を除去
unknown
文字列strから左側の空白文字を削除した文字列を返します。
全角スペースは削除されません
mysql> SELECT LTRIM(' abcde'); Enter
+--------------------+
| LTRIM(' abcde') |
+--------------------+
| abcde |
+--------------------+
1 row in set (0.00 sec)
文字列の右の空白文字を削除
unknown
文字列strから右の空白スペースを削除した文字列を返します。
全角スペースは削除されません
mysql> SELECT LTRIM('あいうえお '); Enter +-----------------------+ | LTRIM('あいうえお ') | +-----------------------+ | あいうえお | +-----------------------+ 1 row in set (0.00 sec) mysql> SELECT RTRIM('abcde '); Enter +--------------------+ | RTRIM('abcde ') | +--------------------+ | abcde | +--------------------+ 1 row in set (0.00 sec)
文字列から特定の文字列を削除
unknown
文字列strから、remstrを削除した文字列を返します。
指定子(BOTH、LEADING、TRAILING)が指定されていない場合は、BOTHが適用されます。 remstrが指定されていない場合は、空白スペースが削除されます。
mysql> SELECT TRIM(' abcde '); Enter +-----------------------+ | TRIM(' abcde ') | +-----------------------+ | abcde | +-----------------------+ 1 row in set (0.00 sec) # 指定子 LEADING を指定した場合 mysql> SELECT TRIM(LEADING 'x' FROM 'xxxABCyyy'); Enter +------------------------------------+ | TRIM(LEADING 'x' FROM 'xxxABCyyy') | +------------------------------------+ | ABCyyy | +------------------------------------+ 1 row in set (0.00 sec) # 指定子 TRAILING を指定した場合 mysql> SELECT TRIM(TRAILING 'xyz' FROM 'xxxABCyyy'); Enter +---------------------------------------+ | TRIM(TRAILING 'xyz' FROM 'xxxABCyyy') | +---------------------------------------+ | xxxABCyyy | +---------------------------------------+ 1 row in set (0.02 sec) # 指定子 BOTH を指定した場合 mysql> SELECT TRIM(BOTH 'x' FROM 'xxxABCyyy'); Enter +---------------------------------+ | TRIM(BOTH 'x' FROM 'xxxABCyyy') | +---------------------------------+ | ABCyyy | +---------------------------------+ 1 row in set (0.00 sec) mysql> SELECT TRIM(BOTH 'と' FROM 'とまと'); Enter +-------------------------------+ | TRIM(BOTH 'と' FROM 'とまと') | +-------------------------------+ | ま | +-------------------------------+ 1 row in set (0.01 sec)
長さlenになるまで文字列の左を文字列padstrで埋める
unknown
文字列strが 長さlenの文字列になるよう、strの左を文字列padstrで埋めた文字列を返します。 strがlenより長い場合は、長さlenに縮められた文字列が返ります。
mysql> SELECT LPAD('1', 5, 0); Enter +---------------+ | LPAD('1',5,0) | +---------------+ | 00001 | +---------------+ 1 row in set (0.05 sec) # 日本語は2バイトとして数えられます mysql> SELECT LPAD('', 6, '★'); Enter +-----------------+ | LPAD('',6,'★') | +-----------------+ | ★★★ | +-----------------+ 1 row in set (0.00 sec) # 日本語は2バイトとして数えられるため、 # 以下のように LPAD('', 5, '★'); とすると文字化けします mysql> SELECT LPAD('', 5, '★'); Enter +-----------------+ | LPAD('',5,'★') | +-----------------+ | ★★・ | +-----------------+ 1 row in set (0.00 sec)
長さlenになるまで文字列の右を文字列padstrで埋める
unknown
文字列strが 長さlenの文字列になるよう、strの右を文字列padstrで埋めた文字列を返します。 strがlenより長い場合は、長さlenに縮められた文字列が返ります。
mysql> SELECT RPAD('1', 5, 0); Enter +-----------------+ | RPAD('1', 5, 0) | +-----------------+ | 10000 | +-----------------+ 1 row in set (0.00 sec) # 日本語は2バイトとして数えられます mysql> SELECT RPAD('', 6, '★'); Enter +-------------------+ | RPAD('', 6, '★') | +-------------------+ | ★★★ | +-------------------+ 1 row in set (0.00 sec) # 日本語は2バイトとして数えられるため、 # 以下のように RPAD('', 5, '★'); とすると文字化けします Enter mysql> SELECT RPAD('', 5, '★'); Enter +-------------------+ | RPAD('', 5, '★') | +-------------------+ | ★★・ | +-------------------+ 1 row in set (0.00 sec)
n個の空白文字
unknown
N個の空白文字を返します。
mysql> SELECT SPACE(5); Enter
+----------+
| SPACE(5) |
+----------+
| |
+----------+
1 row in set (0.00 sec)
文字列の反復
unknown
文字列strを、count回繰り返した文字列を返します。
count <= 0
の場合は、空文字列を返します。
countがNULLの場合は、NULLを返します。
mysql> SELECT REPEAT('*', 5); Enter +---------------+ | REPEAT('*',5) | +---------------+ | ***** | +---------------+ 1 row in set (0.01 sec) mysql> SELECT REPEAT('あ', 5); Enter +-----------------+ | REPEAT('あ', 5) | +-----------------+ | あああああ | +-----------------+ 1 row in set (0.00 sec)
文字列sのsoundex文字列
unknown
文字列strのsoundex文字列を返します。 発音が似通った2つの文字列のsoundex文字列は同じになります。 標準のsoundex文字列の長さは4文字ですが、この関数は任意の長さの文字列を返します。
返り値に対して SUBSTRING()関数を使用すると、標準のsoundex文字列が取得できます。 指定された文字列内の英数字以外の文字は無視されます。A~Zの範囲外のアルファベット文字は全て母音として扱われます。
mysql> SELECT SOUNDEX('Hello'); Enter +------------------+ | SOUNDEX('Hello') | +------------------+ | H400 | +------------------+ 1 row in set (0.05 sec) mysql> SELECT SOUNDEX('Good Morning'); Enter +-------------------------+ | SOUNDEX('Good Morning') | +-------------------------+ | G35652 | +-------------------------+ 1 row in set (0.00 sec)
n=1ならs1、n=2ならs2、・・・を返す
unknown
数値Nの値によって文字列リストから異なる文字列を返します。
N = 1
ならstr1、N = 2
ならstr2を返します。
N = 0
、リスト数以上の値を指定した場合はNULLが返ります。
※ この関数と逆の動作をする場合は、FIELD()関数を使用します。
mysql> SELECT ELT(2, 'a', 'b', 'c'); Enter +-----------------------+ | ELT(2, 'a', 'b', 'c') | +-----------------------+ | b | +-----------------------+ 1 row in set (0.00 sec) mysql> SELECT ELT(0, 'a', 'b', 'c'); Enter +-----------------------+ | ELT(0, 'a', 'b', 'c') | +-----------------------+ | NULL | +-----------------------+ 1 row in set (0.00 sec)
s=s1なら1、s=s2なら2、・・・を返す
unknown
文字列strと等しい文字列がリスト中にある数を返します。
文字列strと等しい文字列が見つからない場合は0を返します。
この関数と逆の動作をする場合は、ELT()関数を使用します。
mysql>SELECT FIELD('b', 'a', 'b', 'c'); Enter +---------------------------+ | FIELD('b', 'a', 'b', 'c') | +---------------------------+ | 2 | +---------------------------+ 1 row in set (0.00 sec) mysql> %SELECT FIELD('x', 'a', 'b', 'c'); Enter +---------------------------+ | FIELD('x', 'a', 'b', 'c') | +---------------------------+ | 0 | +---------------------------+ 1 row in set (0.00 sec)
文字列中の位置
unknown
N 個の部分文字列で構成されるリストstrlistに、文字列strが含まれている場合は、1~Nまでのいずれかの値を返します。 リストは、各部分文字列がカンマ区切りで構成された文字列です。
strlistの先頭が ',' で始っていると正しく動作しないので注意して下さい。
第1引数strが定数文字列で、第2引数がSET型のカラムの場合は、ビット演算を使用するよう最適化されます。
strがstrlistに含まれていない場合、strlistが空文字列の場合は0を返します。 どちらの引数もNULLの場合はNULLを返します。
mysql> SELECT FIND_IN_SET('b', 'a,b,c,d'); Enter
+-----------------------------+
| FIND_IN_SET('b', 'a,b,c,d') |
+-----------------------------+
| 2 |
+-----------------------------+
1 row in set (0.09 sec)
ビットbに対応する文字リスト
unknown
ビットbitのセットに対応するビットを有する文字列から成るセット(カンマ区切りの部分文字列を含む文字列)を返します。 NULLの文字列は結果には含まれません。 str1はビット0に、str2はビット1に対応、.... と引数の数だけ続きます。
mysql> SELECT MAKE_SET(1, 'a', 'b', 'c'); Enter +----------------------------+ | MAKE_SET(1, 'a', 'b', 'c') | +----------------------------+ | a | +----------------------------+ 1 row in set (0.07 sec) mysql> SELECT MAKE_SET(1 | 4, 'hello', 'my', 'friends'); Enter +-------------------------------------------+ | MAKE_SET(1 | 4, 'hello', 'my', 'friends') | +-------------------------------------------+ | hello,friends | +-------------------------------------------+ 1 row in set (0.09 sec)
数値のビット1を文字列on、ビット0を文字列offにし、区切り文字で区切った文字列を返す
unknown
数値bitsに対し、1のビットを文字列onで表し、0のビットを文字列offで表した文字列を返します。 各文字列間は、区切り文字separator(デフォルトはカンマ)で区切られ、ビット数number_of_bits(デフォルトは64)だけが表示されます。
mysql> SELECT EXPORT_SET(5, 'Y', 'N', ',', 4); Enter
+---------------------------------+
| EXPORT_SET(5, 'Y', 'N', ',', 4) |
+---------------------------------+
| Y,N,Y,N |
+---------------------------------+
1 row in set (0.06 sec)
文字列を小文字に変換
※マルチバイト対応
unknown
文字列strを小文字に変換して返します。
LCASE()関数は、LOWER()関数のシノムニです。
mysql> SELECT LOWER('APPLE'); Enter
+----------------+
| LOWER('APPLE') |
+----------------+
| apple |
+----------------+
1 row in set (0.04 sec)
文字列を大文字に変換
※マルチバイト対応
unknown
文字列strを大文字に変換して返します。
UCASE()関数は、UPPER()関数のシノムニです。
mysql> SELECT UPPER('apple'); Enter
+----------------+
| UPPER('apple') |
+----------------+
| APPLE |
+----------------+
1 row in set (0.07 sec)
文字列の置換
unknown
文字列strにある文字列from_strを全て文字列to_strに置換した文字列を返します。
mysql> SELECT REPLACE('埼玉市','埼玉','さいたま'); Enter +-------------------------------------+ | REPLACE('埼玉市','埼玉','さいたま') | +-------------------------------------+ | さいたま市 | +-------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT REPLACE('林檎の木には林檎がなる', '林檎', 'リンゴ'); Enter +-----------------------------------------------------+ | REPLACE('林檎の木には林檎がなる', '林檎', 'リンゴ') | +-----------------------------------------------------+ | リンゴの木にはリンゴがなる | +-----------------------------------------------------+ 1 row in set (0.01 sec) mysql> SELECT REPLACE('ABCDEF','BCDE','bcde'); Enter +---------------------------------+ | REPLACE('ABCDEF','BCDE','bcde') | +---------------------------------+ | AbcdeF | +---------------------------------+ 1 row in set (0.00 sec)
文字列の反転
unknown
文字列strの文字の順序を逆にした文字列を返します。
mysql> SELECT REVERSE('あいうえお'); Enter +-----------------------+ | REVERSE('あいうえお') | +-----------------------+ | おえういあ | +-----------------------+ 1 row in set (0.00 sec) mysql> SELECT REVERSE('abcde'); Enter +------------------+ | REVERSE('abcde') | +------------------+ | edcba | +------------------+ 1 row in set (0.00 sec)
文字列の位置posからlenバイト分をnewstrに置換
※マルチバイト対応
unknown
文字列str内の、位置posから 長さlenの部分文字列を、文字列newstrに置換した文字列を返します。
mysql> SELECT INSERT('ABCDE',2, 3, 'bcd'); Enter +----------------------------+ | INSERT('ABCDE',2, 3,'bcd') | +----------------------------+ | AbcdE | +----------------------------+ 1 row in set (0.00 sec) mysql> SELECT INSERT('ABC',2, 1, 'bbb'); Enter +--------------------------+ | INSERT('ABC',2, 1,'bbb') | +--------------------------+ | AbbbC | +--------------------------+ 1 row in set (0.00 sec) # 引数 l に 0 を指定した場合は、その位置に、置換文字列 f が挿入されます mysql> SELECT INSERT('あう',2, 0,'い'); Enter +--------------------------+ | INSERT('あう',2, 0,'い') | +--------------------------+ | あいう | +--------------------------+ 1 row in set (0.00 sec)
文字列をエスケープ
※MySQL 4.0.3~
unknown
文字列strをSQL文で安全に使用できるよう、引用符で囲んだ文字列を返します。
返り値の文字列は、シングルクウォートで囲まれ、文字列内にシングルクウォート、バックスラッシュ、ASCII NUL、Control-Zが含まれている場合は、その直前にバックスラッシュが挿入されます。 strがNULLの場合はNULLという文字列が引用符で囲まれずに返ります。
mysql> SELECT QUOTE(\"Don't Eat!\"); Enter +---------------------+ | QUOTE(\"Don't Eat!\") | +---------------------+ | 'Don\'t Eat!' | +---------------------+ 1 row in set (0.00 sec) # 引数に NULL を指定した場合は、 # NULL という文字列が引用符で囲まれずに返ります mysql> SELECT QUOTE(NULL); Enter +-------------+ | QUOTE(NULL) | +-------------+ | NULL | +-------------+ 1 row in set (0.01 sec)
文字列左端のASCIIコードを取得
unknown
文字列strの左端にある文字のASCIIコードを返します。
文字列strが空文字列の場合は0を返し、NULLの場合はNULLを返します。
mysql> SELECT ASCII('2'); Enter +------------+ | ASCII('2') | +------------+ | 50 | +------------+ 1 row in set (0.02 sec) mysql> SELECT ASCII(2); Enter +----------+ | ASCII(2) | +----------+ | 50 | +----------+ 1 row in set (0.04 sec) mysql> SELECT ASCII('dx'); Enter +-------------+ | ASCII('dx') | +-------------+ | 100 | +-------------+ 1 row in set (0.00 sec) # 空文字列を指定すると 0 が返ります mysql> SELECT ASCII(''); Enter +-----------+ | ASCII('') | +-----------+ | 0 | +-----------+ 1 row in set (0.00 sec) # NULL を指定すると、NULLが返ります mysql> SELECT ASCII(NULL); Enter +-------------+ | ASCII(NULL) | +-------------+ | NULL | +-------------+ 1 row in set (0.00 sec)
Nのバイナリ文字列式を取得
unknown
longlong(BIGINT)型の数値Nのバイナリ文字列式を返します。
これは、CONV((N, 10, 2)
と同じ結果になります。
NがNULLの場合はNULLを返します。
mysql> SELECT BIN(12); Enter
+---------+
| BIN(12) |
+---------+
| 1100 |
+---------+
1 row in set (0.00 sec)
文字列ノ長さをビットで取得
unknown
文字列strの長さをビットで返します。
mysql> SELECT BIT_LENGTH('abc'); Enter
+-------------------+
| BIT_LENGTH('abc') |
+-------------------+
| 24 |
+-------------------+
1 row in set (0.05 sec)
ASCIIコード→文字列に変換
unknown
引数Nに指定されたASCIIコードの値リストを文字列に変換して返します。 値がNULLの場合はスキップされます。
mysql> SELECT CHAR(97, 112, 112, 108, 101); Enter
+------------------------------+
| CHAR(97, 112, 112, 108, 101) |
+------------------------------+
| apple |
+------------------------------+
1 row in set (0.01 sec)
数値→進数の異なる数値に変換
unknown
数値Nをfrom_base進数からto_base進数に変換した数値を文字列として返します。 引数にNULLが含まれる場合はNULLを返します。 引数Nは整数として解釈されますが、整数だけでなく文字列を指定することができます。
進数の最小は「2」、最大は「36」です。 to_baseが負の値の場合、Nは符号付きの数値とみなされますが、それ以外の場合はNは符号なしの数値として処理されます。
mysql> SELECT CONV('a', 16, 2); Enter +------------------+ | CONV('a', 16, 2) | +------------------+ | 1010 | +------------------+ 1 row in set (0.00 sec) mysql> SELECT CONV('6E', 18, 8); Enter +-------------------+ | CONV('6E', 18, 8) | +-------------------+ | 172 | +-------------------+ 1 row in set (0.00 sec) mysql> SELECT CONV(-17, 10, -18); Enter +--------------------+ | CONV(-17, 10, -18) | +--------------------+ | -H | +--------------------+ 1 row in set (0.00 sec) mysql> SELECT CONV(10+\"10\"+'10'+ 0xa, 10, 10); Enter +---------------------------------+ | CONV(10+\"10\"+'10'+ 0xa, 10, 10) | +---------------------------------+ | 40 | +---------------------------------+ 1 row in set (0.39 sec)