MySQLの演算子や関数について説明します。
なお、個人的に必要無いと思うものについては省略しています(笑)。
MySQL5.0.16対応
MySQLでは、数値⇔文字列の変換は自動的に行われます。
SELECT 100 + '200' -> 300 SELECT 100 < '200' -> 1 (TRUE) SELECT 100 < '22' -> 0 (FALSE)
比較演算の結果は、1(TRUE) / 0(FALSE) / NULL のいずれかになります。
例を挙げます。
SELECT 1 = 1 -> 1 SELECT 1 = 3 -> 0 SELECT 1 = NULL -> NULL SELECT NULL = NULL -> NULL
最後の結果に注意して下さい。
どのデータベースにも共通して言えることですが、NULLという値は
特別な意味を持ちます。
NULL と比較する場合、後述する IS NULL や <=> の構文を使う必要があります。
通常の比較演算子を用いた場合、NULLとの比較は比較対象の値に関わらず常にNULLとなります。
NULL対応の = 演算子です。
SELECT 1 <=> 1 -> 1 SELECT 1 <=> 3 -> 0 SELECT 1 <=> NULL -> 0 SELECT NULL <=> NULL -> 1
結果は、TRUE(1) / FALSE(0) のいずれかになります。NULLにはなり得ません。
値がNULLであるかどうかの比較をします。
SELECT 0 IS NULL -> 0 SELECT 1 IS NULL -> 0 SELECT NULL IS NULL -> 1
AUTO_INCREMENT として定義されたカラムに対しては特殊な動作をします。
CREATE TABLE tbl_name ( auto_col INTEGER AUTO_INCREMENT PRIMARY KEY, col1 CHAR(1) );
上記のテーブルが定義されている場合を考えます。
INSERT INTO tbl_name (col1) values ('7');
SELECT auto_col FROM tbl_name WHERE auto_col IS NULL;
上のSQL文は、直前に挿入されたレコードを取得することが出来ます。
通常の解釈からすると、2行目のSQL文は何のレコードも取得できないように見えますが
これは特殊構文と解釈され、1行目で挿入されたレコード(のカラム)を返します。
IS NULL 構文はやや冗長な記述法なので、別の記述法も用意されています。
例えば、
SELECT a IS NULL
は以下の構文に置き換えることが出来ます。
SELECT ISNULL(a)
こちらの方がすっきりしていて見やすいです。
値がある範囲にあるかどうかの比較をします。
SELECT 5 BETWEEN 0 AND 10 -> 1 SELECT 'b' BETWEEN 'a' AND 'c' -> 1
値が、指定した値(複数)のいずれかに存在するかどうかを返します。
SELECT 2 IN (0,1,2,3) -> 1 SELECT 10 IN (0,1,2,3) -> 0 SELECT * FROM tbl_name WHERE id IN (0,1,2)
INは別の文で置き換えることも出来ます。
A IN (0,1,2,3)
これは、次のSQL文と結果は同じ(常に同じかどうかは未確認)です。
(A = 0) OR (A = 1) OR (A = 2) OR (A = 3)
配列中で最初の非NULL要素を返します。
SELECT COALESCE(NULL, NULL, 5) -> 5 SELECT COALESCE(NULL, NULL, NULL) -> NULL
配列中のどの値の範囲にあるかを返します。
SELECT INTERVAL(N,N1,N2,...,Nn)
N<N1の場合は0、N<N2の場合は1、という感じになります。
N>Nnの場合はnを返します。
SELECT INTERVAL(-5,0,10,20) -> 0 SELECT INTERVAL(5,0,10,20) -> 1 SELECT INTERVAL(30,0,10,20) -> 3
値は全て整数である必要があります。
プログラム言語のcaseと同じです。
SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" END -> "one"
プログラム言語のif-elseと同じです。
SELECT IF(2>1, "yes", "no") -> "yes"
第1引数の結果がTRUEの場合、第2引数の値を返します。
FALSEの場合、第3引数の値を返します。
IFNULL(expr, default_value)
値(expr)がNULLの場合にデフォルト値(default_value)を返します。
SELECT IFNULL(NULL,0) -> 0 SELECT IFNULL(2,0) -> 2
expr がNULLでない場合は、expr をそのまま返します。expr がNULLの場合は、default_value を返します。
NULLIF(expr1, expr2)
expr1 == expr2 の場合はNULLを返します。
それ以外の場合は、expr1 を返します。
先頭文字のASCIIコード値を返します。
SELECT ASCII('012') -> 48
SELECT ASCII('') -> 0
SELECT ASCII(NULL) -> NULL
整数の2進数表現を返します。
SELECT BIN(12) -> '1100'
文字列の長さをビット単位で返します。
SELECT BIT_LENGTH('text') -> 32
SELECT BIT_LENGTH('あ') -> 16
ASCII値の配列から文字列を生成して返します。
SELECT CHAR(77,121,83,81,76) -> 'MySQL'
文字列の長さを文字数単位で返します。
SELECT CHAR_LENGTH('text') -> 4
SELECT CHARACTER_LENGTH('あ') -> 1
文字列を連結してその結果を返します。
SELECT CONCAT('My', 'S', 'QL') -> 'MySQL'
文字列を区切り文字で連結してその結果を返します。
SELECT CONCAT_WS(',', 'My', 'S', 'QL') -> 'My,S,QL'
CONV(N, from_base, to_base)
数値を、進数の異なる表現で返します。
SELECT CONV('c',16,10) -> 12
SELECT CONV(19,16,2) -> 11001
from_base 進数で表現された N を to_base 進数に変換します。
ELT(N, str1, str2, ..., strMAX)
Nの値によって異なる値を返します。
CASE と似ていますが、より簡略化されています。
SELECT ELT(1, 'one', 'two', 'three') -> 'one' SELECT ELT(0, 'one', 'two', 'three') -> NULL
N が1だったら str1、2だったら str2 を返します。N が1未満だったりMAXを超えている場合はNULLを返します。
FIELD(str, str1, str2, ..., strMAX)
ELT と似ていますが、第一引数に文字列を指定するところが異なります。
SELECT FIELD('two', 'one', 'two', 'three') -> 2
SELECT FIELD('four', 'one', 'two', 'three') -> 0
str が str1 と同じだったら1、str2 と同じだったら2を返します。str と同じ文字列がstrNに見つからない場合は0を返します。
数値または文字列を16進数表現で返します。
SELECT HEX(255) -> 'FF'
SELECT HEX('abc') -> '616263'
引数が文字列の場合、各文字のASCIIコード値を16進数表現にして、それを連結した値を返します。
INSERT(str, pos, len, replace_str)
文字列中の文字を置き換えます。
SELECT INSERT('abcdefg', 3, 2, '01234') -> 'ab01234efg'
SELECT INSERT('abcde', 3, 0, '123') -> 'ab123cde'
pos は挿入する文字位置(先頭は1)、len は置き換える文字数です。
INSTR(str, find_str)
文字列中で最初に検索文字列が出現する位置を返します。
SELECT INSTR('0123456789', '45') -> 5
SELECT INSTR('0123456789', '49') -> 0
文字列が出現しなかった場合は0を返します。
INSTR関数は、LOCATE 関数に置き換えられます。引数の順序が逆になる事を注意して下さい。
LOCATE(find_str, str)
LEFT(str, len)
文字列の先頭len文字を返します。
SELECT LEFT('0123456', 3) -> '012'
SELECT LEFT('0123', 6) -> '0123'
len が str の文字列長より長い場合は str をそのまま返します。
LEFTの逆。文字列の後方len文字を返します。
SELECT RIGHT('0123456', 3) -> '456'
SELECT RIGHT('0123', 6) -> '0123'
文字列の長さをバイト数単位で返します。
SELECT LENGTH('text') -> 4
SELECT LENGTH('あいう') -> 6
LOCATE(find_str, str) LOCATE(find_str, str, pos)
文字列中の指定位置(pos文字目)より後ろで、最初に検索文字列が出現する位置を返します。
SELECT LOCATE('45', '0123456789') -> 5
SELECT LOCATE('abc', 'abc00abc', 3) -> 6
pos は省略すると1(文字列の先頭から検索)になります。
文字列を小文字に変換します。
SELECT LOWER('abcDEF') -> 'abcdef'
文字列を大文字に変換します。
SELECT LOWER('abcDEF') -> 'ABCDEF'
LPAD(str, len, padding_str)
文字列長が一定の長さになるまで、文字列の左側を指定文字で埋めます。
SELECT LPAD('123', 5, '0') -> '00123'
SELECT LPAD('123456', 5, '0') -> '12345'
文字列長が len より長い場合には、文字列の右側が切り捨てられます。
LPAD の逆で、文字列の右側を指定文字で埋めます。
SELECT RPAD('123', 5, '0') -> '12300'
SELECT RPAD('123456', 5, '0') -> '12345'
文字列の左側にある空白文字を削除します。
SELECT LTRIM(' 123') -> '123'
文字列の右側にある空白文字を削除します。
SELECT LTRIM('123 ') -> '123'
任意の文字列をトリミング(削除)します。
TRIM(str) TRIM([BOTH | LEADING | TRAILING] [remstr] FROM str)
引数が一つの場合は、LTRIM と RTRIM の両方を適用した場合と同じ結果になります。
BOTH は省略したときのデフォルト値、
LEADING は LTRIM と同じ、TRAILING は RTRIM と同じになります。remstr は、削除対象の文字で省略すると空白文字(半角スペース)になります。
SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx') -> 'barxxx' SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz') -> 'barx'
数値を8進数表現で返します。
SELECT OCT(100) -> '144'
文字列をSQLエスケープして返します。
SELECT QUOTE("Don't") -> 'Don\'t!'
返される文字列は引用符(シングルクォーテーション)で囲まれています。
文字列を指定した回数だけ繰り返して返します。
SELECT REPEAT('ab', 3) -> 'ababab'
REPLACE(str, from_str, to_str)
文字列中に現れる文字列from_strの全てをto_strで置き換えます。
SELECT REPLACE('012012', '0', 'xx') -> 'xx12xx12'
文字列を逆さにして返します。
SELECT REVERSE('abcde') -> 'edcba'
SPACE(n)
n文字の空白文字を返します。
SELECT SPACE(6) -> ' '
SUBSTRING(str, pos) SUBSTRING(str, pos, len)
部分文字列を返します。
SELECT SUBSTRING('0123456789', 4) -> '3456789'
SELECT SUBSTRING('0123456789', 4, 3) -> '345'
len が省略された場合は、pos文字目以降の全ての文字列を返します。
SUBSTRING_INDEX(str, delimiter, count)
文字列中の、指定された区切り文字がcount番目に現れた箇所より前(後)の文字列を返します。
SELECT SUBSTRING_INDEX('0:1:2:3:4', ':', 2) -> '0:1'
SELECT SUBSTRING_INDEX('0:1:2:3:4', ':', -3) -> '2:3:4'
count が正数の場合は左端から区切り文字を検索し、見つかった箇所より前の文字列を返します。count が負数の場合は右端から区切り文字を検索し、見つかった箇所より後の文字列を返します。
expr LIKE pattern expr LIKE pattern ESCAPE escape_char
簡易正規表現を用いて文字列を比較します。
エスケープ文字escape_charは、省略すると '\' になります。
「%」は任意の文字列(正規表現の.*)、「_」は任意の1文字(正規表現の.)と一致します。
SELECT '01234' LIKE '01%' -> 1 SELECT '01234' LIKE '01___' -> 1 SELECT '01234' LIKE '01__' -> 0 SELECT '01234_' LIKE '01234\_' -> 1 SELECT '01234_' LIKE '01234|_' ESCAPE '|' -> 1
LIKEは数値式でも利用できます。
SELECT 123000 LIKE '123%' -> 1
プログラマにとって嬉しいのがこの機能ですね。
MySQLでは(簡易ではない)正規表現を使うことが出来ます。
SELECT '0123' REGEXP '01.*' -> 1
文字列を比較して、-1 / 0 / 1 のいずれかを返します。
SELECT STRCMP('a', 'b') -> -1
SELECT STRCMP('b', 'b') -> 0
SELECT STRCMP('b', 'a') -> 1
文字列をバイナリ文字列にキャストします。
全ての数値関数は、エラーが発生すると NULL を返します。
ABS(n)
数値の絶対値を返します。
MySQL4.1.0以降で利用できます。
文字列のCRC32値(符号なし32ビット)を返します。
PI()
πの値を返します。
RAND() RAND(N)
0 〜 1.0 の範囲でランダム値を生成して返します。
引数(整数)を指定すると、その値に基づいたランダム値が返されます。
この場合、同じ N ならばその結果は常に等しくなります。
RAND() -> 0.85110556972316 RAND() -> 0.69612415106606 RAND(3) -> 0.90576975597606 RAND(3) -> 0.90576975597606
数値が「負数 / 0 / 正数」のいずれに属するかを返します。
返される値はそれぞれ、 -1 / 0 / 1 になります。
SELECT SIGN(100) -> 1 SELECT SIGN(-50) -> -1
MySQL4.1.0以降で利用できます。
除算の商を返します。
SELECT 75 DIV 10 -> 7
EXP(n)
eの n 乗を返します。
eとは自然対数の底を表します。
SELECT EXP(3) -> 20.085537
配列で与えた値の中で最大のものを返します。
MySQL3.22.5以前では MAX、それ以降のバージョンでは GREATEST を使用できます。
SELECT GREATEST(10, 100, 50) -> 100
SELECT MAX('AB', 'BA', 'AZ') -> 'BA'
GREATEST の逆です。値の中で最小のものを返します。
LOG(n)
n の自然対数を返します(底はe)。
LOG(n, B)
B を底とする n の自然対数を返します。
LOG のシノニム(別名)です。
それぞれ 2 , 10 を底とした自然対数を返します。
割った余りを返します。
SELECT MOD(234, 10) -> 4
POW(x,y)
x の y 乗を返します。
SELECT POW(2,8) -> 256
数値の平方根を返します。
SELECT SQRT(9) -> 3
数値のコサイン値を返します。
数値のアークコサイン値を返します。
数値のコタンジェント値を返します。
数値のアークサイン値を返します。
数値のタンジェント値を返します。
ATAN(n)
数値のアークタンジェント値を返します。
ATAN(Y,X)
2つの変数 X と Y のアークタンジェントを返します。
CEIL(X)
X 以上の最も小さい整数値を返します。
SELECT CEILING(1.5) -> 2 SELECT CEIL(-1.5) -> -1
X 以下の最も大きい整数値を返します。
SELECT CEILING(1.5) -> 1 SELECT CEIL(-1.5) -> -2
ROUND(n) ROUND(n, scale)
数値を最も近い整数に丸めた値を返します。
引数scaleを指定した場合は、小数桁数をscaleにして丸めます。
SELECT ROUND(1.4) -> 1 SELECT ROUND(1.8) -> 2 SELECT ROUND(1.1874, 2) -> 1.19 SELECT ROUND(1.5) -> 1
なお、最後の例は環境によって結果が異なる可能性があります。
TRUNCATE(n, scale)
数値の小数桁数scaleにして切り捨てた値を返します。
SELECT TRUNCATE(1.8, 0) -> 1 SELECT TRUNCATE(1.899, 2) -> 1.89
数値をラジアン単位から度単位に変換します。
SELECT DEGREES(PI()) -> 180
DEGREES の逆です。数値を度単位からラジアン単位に変換します。
ADDDATE(date,INTERVAL expr type)
日付を加算した結果を返します。date には基準となる日付、type には加算する単位(DAYなど)、expr には加算する数値を指定します。
SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY) -> '1998-02-02'
typeに指定できる単位は以下の通りです。
以下のtypeは、MySQL4.1.1以降で利用できます。
MySQL4.1.1以降で利用できます。
ADDTIME(expr, expr2)
時刻を加算した結果を返します。expr には基準となる日付または日付時刻式を指定し、expr2 には加算する時刻式を指定します。
SELECT ADDTIME("1997-12-31 23:59:59.999999", "1 1:1:1.000002")
-> '1998-01-02 01:01:01.000001'
現在の日付を返します。
SELECT CURDATE() -> '1997-12-15'
現在の時刻を返します。
SELECT CURTIME() -> '23:50:26'
現在の日付時刻を返します。
使われた文脈(コンテキスト)によって、文字列形式または数値形式で値を返します。
SELECT NOW() -> '1997-12-15 23:50:26' SELECT NOW() + 0 -> 19971215235026
MySQL4.1.1以降で利用できます。
日付部分を取り出します。
SELECT DATE('2003-12-31 01:02:03') -> '2003-12-31'
MySQL4.1.1以降で利用できます。
時刻部分を取り出します。
SELECT TIME('2003-12-31 01:02:03') -> '01:02:03'
MySQL4.1.1以降で利用できます。
2つの日付の差を日数単位で返します。
SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30') -> 1
DATE_ADD(date,INTERVAL expr type)
ADDDATE と同じです。
日付時刻を文字列形式にフォーマットします。
DATE_FORMAT(date, format)
format には以下の指定子を使用できます(一部省略)。
月の名前(January...)
曜日名(Sunday...)
英語のサフィックス付きの日付(0th...)
4桁の数値で表した年。
2桁の数値で表した年。
略式の曜日名(Sun...)
数値で表した日付(00..31)
数値で表した日付(0..31)
数値で表した月(00..12)
数値で表した月(0..12)
略式の月名(Jan...)
年間を通した日にち(001..366)
時(00..23)
時(0..23)
午前または午後の時(01..12)
午前または午後の時(1..12)
分 (00..59)
12時間形式の時刻(hh:mm:ss に続けて AM または PM)
24時間形式の時刻(hh:mm:ss)
秒(00..59)
MySQL4.1.1以降。マイクロ秒(000000..999999)
AM または PM
曜日(0=Sunday..6=Saturday)
% のエスケープ表記
例を挙げます。
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i:%s') -> '2004/10/29 12:16:31'
DATE_FORMAT の逆の働きをします。
文字列を指定されたフォーマットで解析して、日付時刻型で返します。
SELECT STR_TO_DATE('03.10.2003 09.20', '%d.%m.%Y %H.%i')
-> 2003-10-03 09:20:00
DATE_FORMAT とほぼ同じですが、フォーマット文字列には
時・分・秒に関する形式指定子のみ指定できます。
SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l')
-> '100 100 04 04 4'
指定された日付の日(1~31)を返します。
DAY はMySQL4.1.1以降で利用できるシノニム(別名)です。
SELECT DAYOFMONTH('1998-02-03') -> 3
指定された日付の曜日名を返します。
SELECT DAYNAME('1998-02-05') -> 'Thursday'
指定された日付の曜日インデックス(1: 日曜 ~ 7:土曜)を返します。
SELECT DAYOFWEEK('1998-02-03') -> 3
指定された日付に対し、年間を通した日にち(1~366)を返します。
SELECT DAYOFYEAR('1998-02-03') -> 34
指定された時刻の時を返します。
SELECT HOUR('10:05:03') -> 10
なお、MySQLでは時刻(TIME)値として実在しない時間を表すことも可能です。
例えば、以下のような使い方も出来ます。
SELECT HOUR('272:59:59') -> 272
MySQL4.1.1以降で利用できます。
指定した時刻のマイクロ秒(0~999999)を返します。
SELECT MICROSECOND('12:00:00.123456') -> 123456
指定された時刻の分を返します。
SELECT MINUTE('98-02-03 10:05:03') -> 5
指定された日付の月を返します。
SELECT MONTH('1998-02-03') -> 2
指定された日付の月の名前を返します。
SELECT MONTHNAME('1998-02-05') -> 'February'
指定された日付の四半期を、1~4の値で返します。
SELECT QUARTER('98-04-01') -> 2
指定された日付の秒を返します。
SELECT SECOND('10:05:03') -> 3
指定された日付に対応する週の数を返します。
SELECT WEEK('1998-02-20') -> 7
MySQL4.0以降では、追加引数により戻り値の範囲などを変更できますが
詳細は不明です。
指定された日付の曜日インデックス(0: 月曜 ~ 6:日曜)を返します。
DAYOFWEEK と似ていますが、曜日インデックスの割り振り方が異なります。
SELECT WEEKDAY('1998-02-03 22:23:00') -> 1
指定された日付のカレンダ上の週(1~53)を返します。
SELECT WEEKOFYEAR('1998-02-20') -> 8
指定された日付の年を返します。
SELECT YEAR('98-02-03') -> 1998
EXTRACT(type FROM date)
指定された日付の一部を抽出します。type は、ADDDATE で使用できる型と同じです。
SELECT EXTRACT(YEAR FROM "1999-07-02") -> 1999
FROM_DAYS(N)
ある日付から N 日分経過した日付を返します。
「ある日付」の具体的な年月日は不明です。
この関数は、ある日付にユニークな1次元の数値を割り当てたいとき等に使用します。N という数値は特別な意味を持っていません。
SELECT FROM_DAYS(729669) -> '1997-10-07'
FROM_UNIXTIME(unix_timestamp)
指定したタイムスタンプ値を日付に変換して、文字列もしくは数値で返します。
どちらで返されるかは、文脈(コンテキスト)によって判断されます。
SELECT FROM_UNIXTIME(875996580) -> '1997-10-04 22:23:00' SELECT FROM_UNIXTIME(875996580) + 5 -> 19971004222305
タイムスタンプ値とは、1970年1月1日からの経過秒数です。
文字列のフォーマットを指定する場合は以下のようにします。
FROM_UNIXTIME(unix_timestamp, format)
format の書式は DATE_FORMAT と同じです。
MySQL4.1.1以降で利用できます。
フォーマットの文字列を返します。詳細は不明です。
MySQL4.1.1以降で利用できます。
指定された日付が含む月の、最後の日にちを返します。
SELECT LAST_DAY('2004-02-05') -> '2004-02-29'
MySQL4.1.1以降で利用できます。
MAKEDATE(year, day_of_year)
year 年の1月1日から数えて day_of_year 日目の日付を返します。day_of_year は1以上の値を指定する必要があります。
SELECT MAKEDATE(2001,31) -> '2001-01-31'
MySQL4.1.1以降で利用できます。
MAKE_TIME(hour, minute, second)
引数で指定した時・分・秒から生成した時刻を返します。
SELECT MAKETIME(12,15,30) -> '12:15:30'
指定した秒数を「HH:MM:SS」形式で返します。
SELECT SEC_TO_TIME(2378) -> '00:39:38'
MySQL4.1.1以降で利用できます。
TIMEDIFF(expr, expr2)
2つの時刻の差を返します。
SELECT TIMEDIFF('1997-12-31 23:59:59','1997-12-30 01:01:01')
-> '46:58:58'
指定した日付または日付時刻値を日付時刻値として返します。
SELECT TIMESTAMP('2003-12-31') -> '2003-12-31 00:00:00'
指定された時刻を秒数に変換して返します。
SELECT TIME_TO_SEC('22:23:00') -> 80580
指定された日付を日数(年 0 からの通し日数)に変換して返します。
SELECT TO_DAYS('1997-10-07') -> 729669
指定された日付のタイムスタンプ値を返します。
タイムスタンプ値とは、1970年1月1日からの経過秒数です。
引数を省略した場合は、現在時刻のタイムスタンプ値を返します。
SELECT UNIX_TIMESTAMP() -> 882226357
MySQL4.1.1以降で利用できます。
現在日付を文字列または数値で返します。
SELECT UTC_DATE() -> '2003-08-14'
MySQL4.1.1以降で利用できます。
現在時刻を文字列または数値で返します。
SELECT UTC_DATE() -> '18:07:53'
MySQL4.1.1以降で利用できます。
現在日付時刻を文字列または数値で返します。
SELECT UTC_DATE() -> '2003-08-14 18:08:04'
調査中…
MySQL4.0.2以降で利用できます。
AES(Advanced Encryption Standard)アルゴリズムで
データの暗号化/解読を行います。
INSERT INTO t VALUES (AES_ENCRYPT('text', 'password'))
上の例では、文字列 text を password により暗号化しています。
この関数は、現在MySQLで利用できる最も安全性の高い暗号化関数だそうです。
MySQLのベンチマークを計測します。
SELECT BENCHMARK(1000000, ENCODE('hello', 'goodbye'))
上の例では、ENCODE関数を1000000回繰り返して実行します。
結果の値は常に0が返ります。
どこがベンチマーク関数なのかと思うかもしれませんが、
実際のSQL実行時間はクライアント側で測ってくれという事らしいです。
もっとも、それなりのクライアントを使っていれば
SQL文の実行時間くらいは表示されるはずです。
REPEAT関数と言った方がわかりやすいかもしれませんね。
MySQL4.1.1以降で利用できます。
文字列を圧縮します。
圧縮後の結果は、CHARやVARCHARでなくBLOB型カラムへ格納するよう推奨されています。
SELECT LENGTH(COMPRESS('aaaaaaaaaaaaaaaaaaaaaaaa'))
現在の接続IDを返します。
現在接続中のユーザ名およびホスト名を返します。
SELECT CURRENT_USER() -> 'limy@localhost'
カレントデータベース名を返します。
カレントデータベースが無い場合、MySQL4.1.1以降ではNULLを返しますが
それ以前のバージョンでは空文字列を返します。
文字列の暗号化/解読を行います。
Triple-DESアルゴリズムによって文字列の暗号化/解読を行います。
Unixのcrypt()システムコールを利用して文字列を暗号化します。