powerdee.com
Google
 
このサイト内 Web
 
カウンタ

MySQLの演算子とSQL関数

インデックスへ戻る

演算子

MySQLで利用できる演算子について一覧を以下に示す。

種類 演算子
論理演算子 AND, OR, NOT, XOR
比較演算子 =, >, <, <=, >=, <>, !=
IS (NOT) NULL
(NOT) IN, (NOT) EXISTS
(NOT) BETWEEN
(NOT) LIKE
正規表現 REGEXP
算術演算子 +, -, *, /
文字列(連結)演算子 ||
日付/時刻演算子 +, -
集合演算子 UNION (ALL)

文字列関数

文字列関数の一覧を以下に示す。

関数 機能 サンプル
ASCII(x) 文字列xの左端の文字コードを10進数で返す。 ASCII('2') ⇒ 50
BIN(N) 整数を2進数で返す。 BIN(12) ⇒ '1100'
BIT_LENGTH(x) 文字列xの長さをビットで返す。 BIT_LENGTH('text') ⇒ 32
BIT_LENGTH('あ') ⇒ 16
CHAR(N,...) 10進数NのASCIIコード値から文字を返す。 CHAR(77,121,83,81,'76') ⇒ 'MySQL'
CHAR_LENGTH(x) 文字列xの文字数を返す。
マルチバイト文字は1文字とみなす。
CHAR_LENGTH('text') ⇒ 4
CHAR_LENGTH('あ') ⇒ 1
CONCAT(x,y,...) 文字列x,yを順番に連結する。
いずれかの引数がNULLのときはNULLを返す。
CONCAT('My','S','QL') ⇒ 'MySQL'
CONCAT('My',null,'QL') ⇒ null
CONCAT_WS
('区切り文字',x,y,...)
文字列を区切り文字で連結してその結果を返却する。 CONCAT_WS(',','My',S','QL')
⇒ 'My,S,QL'
CONV(N,from_base,to_base) 数値を、進数の異なる数値に変換する。 CONV("a",16,2) ⇒ '1010'
CONV(20,16,10) ⇒ '32'
ELT(N,x1,x2,x3...) N番目の引数で指定した文字列を返却する。 ELT(1,'a','b','c','d') ⇒ 'a'
ELT(4,'a','b','c','d') ⇒ 'd'
FIELD(str,x1,x2,x3...) x1,2,3,...リスト内のstrのインデックスを返却する。
strが検出されない場合は、0を返す。(ELT()の逆)
FIELD('a','a','b','c') ⇒ 1
FIELD('c','a','b','c') ⇒ 3
HEX(x) 数値または文字列を16進数で返却する。 HEX(255) ⇒ 'FF'
HEX('あ') ⇒ 'A4A2'(EUC-JPの場合)
INSERT(str,pos,len,newstr) str内の位置posから長さlenまでの文字列を
newstrに置き換えた文字列を返す。
INSERT('あいうえお',3,2,'か')
⇒ 'あいかお'
INSTR(str,substr) str内で最初にsubstrが出現する位置を返却する。 INSTR('foobarbar','bar') ⇒ 4
INSTR('あいうえお', 'う') ⇒ 3
LEFT(str,len) strの左端にある長さlenの文字を返却する。
RIGHTの逆。
LEFT('foobar',4) ⇒ 'foob'
LEFT('abcd',6) ⇒ 'abcd'
LENGTH(str) strの長さ(バイト)を返却する。 LENGTH('foobar') ⇒ 6
LENGTH('あいうえお') ⇒ 10
LOCATE(x,str)
LOCATE(x,str,pos)
str内の指定位置(pos)より後ろで、
最初に検索文字列xが出現する位置を返却する。
posを指定しなければ、先頭から検索する。
LOCATE('bar','foobarbar') ⇒ 4
LOCATE('え','あいうえおうえ',5) ⇒ 7
LOWER(str) 文字列を小文字に変換する。UPPERの逆。 LOWER('abcDEFG') ⇒ 'abcdefg'
LOWER('あいう') ⇒ 'あいう'
LPAD(str,len,padstr) 文字列strがlenの長さになるまで
strの左側にpadstrを埋める。RPADの逆。
LPAD('123',5,'0') ⇒ '00123'
LPAD('あいう',5,'x') ⇒ 'xxあいう'
LPAD('abcdef',3,'0') ⇒ 'abc'
LTRIM(str) 文字列の左側にある空白文字を削除。RTRIMの逆。 LTRIM(' 123') ⇒ '123'
MID(str,pos,len) SUBSTRING(str,pos,len)のシノニム。
OCT(N) Nの8進数の文字列を返却する。 OCT(12) ⇒ '14'
QUOTE(str) strをSQLで正しいエスケープデータ値として返却する。
引数がNULLの場合、単一引用符で囲まれずに返される。
QUOTE("Don't") ⇒ 'Don\'t'
QUOTE(NULL) ⇒ NULL
REPEAT(str,count) 文字列を指定した回数繰り返す。 REPEAT('SQL',3) ⇒ 'SQLSQLSQL'
REPEAT('げ',3) ⇒ 'げげげ'
REPLACE(str,x,y) 文字列str内のxをyに置換する。 REPLACE('<br','<','&lt') ⇒ '&ltbr'
REPLACE('あいうえお','う','woo')
⇒ 'あいwooえお'
REVERSE(str) 文字列strの順序を逆にする。 REVERSE('abc') ⇒ 'cba'
REVERSE('あいうえお') ⇒ 'おえういあ'
RIGHT(str,len) 文字列strの右側にある長さlenの文字を返す。
LEFTの逆。
RIGHT('foobarbar',4) ⇒ 'rbar'
RIGHT('あいうえお',4) ⇒ 'いうえお'
RPAD(str,len,padstr) 文字列strがlenの長さになるまで
strの右側にpadstrを埋める。LPADの逆。
RPAD('123',5,'0') ⇒ '12300'
RPAD('あいう',5,'x') ⇒ 'あいうxx'
RPAD('abcdef',3,'0') ⇒ 'abc'
RTRIM(str) 文字列の右側にある空白文字を削除。LTRIMの逆。 RTRIM('123 ') ⇒ '123'
SPACE(N) N文字のスペースを返却する。 SPACE(6) ⇒ ' '
SUBSTRING(str,pos)
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos)
SUBSTRING
(str FROM pos FOR len)
部分文字列を返却する。lenが省略された場合は、
pos文字以降の文字列を返却する。
FROM を使用する形式は SQL-92 の構文。
SUBSTRING('Quadratically',5,6)
⇒ 'ratica'
SUBSTRING('あいうえお',3,2)
⇒ 'うえ'
SUBSTRING('foobarbar' FROM 4)
⇒ 'barbar'
SUBSTRING_INDEX(str,x,count) str文字列中の区切り文字xが
count番目の直前の部分文字列を返却する。
countが整数なら左から数える。
countが負数の場合は、右から数える。
SUBSTRING_INDEX('a;b;c;d;e;f',';',2)
⇒ 'a;b'
SUBSTRING_INDEX('a;b;c;d;e;f',';',-2)
⇒ 'e;f'
TRIM(str)
TRIM([BOTH | LEADING |
TRAILING] [remstr] FROM str)
引数がstrのみの場合は、
LTRIM,RTRIMを両方適用した場合と同じ。
LEADINGは、LTRIMと同じ。
TRALINGは、RTRIMと同じ。
remstrは、削除対象文字で省略時はスペース。
TRIM(' bar ') ⇒ 'bar'
TRIM(BOTH 'x' FROM 'xxxbarxxx')
⇒ 'bar'
TRIM(LEADING 'x' FROM 'xxxbarxxx')
⇒ 'barxxx'
TRIM(TRAILING 'x' FROM 'xxxbarxxx')
⇒ 'xxxbar'
UPPER(str) 文字列を大文字に変換する。LOWERの逆。 UPPER('abcDEFG') ⇒ 'ABCDEFG'
UPPER('あいう') ⇒ 'あいう'

数学関数

数学関数の一覧を以下に示す。すべての数学関数はエラーの場合NULLを返す。

関数 機能 サンプル
ABS(X) Xの絶対値を返す。 ABS(2) ⇒ 2
ABS(-32) ⇒ 32
CEILING(X),CEIL(X) X以上の最も小さい整数値を返す。 CEILING(1.23) ⇒ 2
CEIL(-1.23) ⇒ -1
CRC32(expr) 巡回冗長検査値を計算し、32 ビットの符号なしの値を返す。 CRC32('MySQL') ⇒ 3259397556
DIV 整数の除算。 FLOOR() と同様。 SELECT 5 DIV 2 ⇒ 2
EXP(X) e(自然対数の底)をX乗した値を返す。 EXP(2) ⇒ 7.389056
EXP(-2) ⇒ 0.135335
FLOOR(X) X 以下の最も大きい整数値を返す。 FLOOR(1.23) ⇒ 1
FLOOR(-1.23) ⇒ -2
GREATEST(X,Y,...) 最も大きい引数を返す。各引数の比較方法は、LEASTと同じ。 GREATEST(34.0,5.0,767.0) ⇒ 767.0
GREATEST("B","A","C") ⇒ "C"
LEAST(X,Y,...) 最も小さい引数を返す。各引数の比較方法は以下のとおり。
・戻り値がINTEGERの場合または引数が全て整数の場合
 ⇒ 各引数は整数として比較される。
・戻り値がREALの場合または引数が全て実数の場合
 ⇒ 各引数は実数として比較される。

LEAST(34.0,5.0,767.0) ⇒ 5.0
GREATEST("B","A","C") ⇒ "A"
LOG2(X) 2 を底とする X の自然対数を返す。
特定の数値の格納に何ビット必要か調べるのに役立つ。
LOG2(65536) ⇒ 16.000000
MOD(N,M) , % N を M で割ったときの余りを返す。 MOD(234, 10) ⇒ 4
SELECT 253 % 7 ⇒ 1
PI() π の値を返す。 SELECT PI() ⇒ 3.141593
POW(X,Y), POWER(X,Y) X を Y 乗した値を返す。 POW(2,2) ⇒ 4
POW(2,-2) ⇒ 0.250000
RAND(), RAND(N) 0〜1.0の範囲のランダムな浮動小数点数を返す。
引数にシード値(繰り返し)を指定できる。
RAND() ⇒ 0.9233482386203
RAND(20) ⇒ 0.15888261251047
RAND(20) ⇒ 0.15888261251047
ROUND(X),ROUND(X,D) 引数 X を最も近い整数に丸めた値を返す。
小数部の桁数を D に指定された桁数に丸める。
ROUND(1.58) ⇒ 2
ROUND(1.298, 1) ⇒ 1.3
ROUND(23.298, -1) ⇒ 20
SIGN(X) X が負数/ゼロ/正数かに応じて-1/0/1 を返す。 ROUND(1.58) ⇒ 2
SIGN(-32) ⇒ -1
SIGN(0) ⇒ 0
SIGN(234) ⇒ 1
TRUNCATE(X,D) 数値 X の小数部を D に指定された桁数に切り捨てた値を返す。 TRUNCATE(1.223,1) ⇒ 1.2
TRUNCATE(-1.999,1) ⇒ -1.9

日付関数

不正な日付や時刻を入力した場合、戻り値はNULLを返す。

関数 機能 サンプル
ADDDATE
(date,INTERVAL expr unit)
INTERVALを指定する形式の場合、DATE_ADD()のシノニム。 ADDDATE('1998-01-02', INTERVAL 31 DAY)
⇒ '1998-02-02'
ADDDATE(expr,days) exprには、日付式か日付時刻式(※)を指定する。
days には expr に加える日数を指定する。
※日付/時刻型の「値の格納方法」を参照。
ADDDATE('1998-01-02', 31)
⇒ '1998-02-02'
ADDTIME(expr,expr2) expr に expr2 を加えた結果が返される。
expr には日付式か日付時刻式を指定し、
expr2 には時刻式を指定する。
ADDTIME('2006-11-10 23:59:59.99'
 ,'01:00:00.01')
⇒ '2006-11-11 01:00:00.000000'
CURDATE()
CURRENT_DATE
CURRENT_DATE()
現在の日付を文字列もしくは数値で返す。 CURDATE() ⇒ '2006-11-10'
CURDATE() + 0 ⇒ 20061110
CURTIME()
CURRENT_TIME
CURRENT_TIME()
現在の時刻を文字列もしくは数値で返す。 CURTIME() ⇒ '23:50:26'
CURTIME() + 0 ⇒ 235026.000000
NOW()
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP()
LOCALTIME
LOCALTIME()
SYSDATE()
現在の日付と時刻を文字列もしくは数値で返す。 NOW() ⇒ '2006-11-10 20:41:55'
NOW() + 0
⇒ 20061110204223.000000
DATE(expr) 日付式または日付時刻式 expr の日付部分を取り出す。 DATE('2006-11-10 20:41:55')
⇒ '2006-11-10'
DATEDIFF(expr,expr2) 2つの日付の差を日数単位で返す。 DATEDIFF('1997-12-31 23:59:59'
 ,'1997-12-30') ⇒ 1
DATE_ADD
 (date,INTERVAL expr unit)
DATE_SUB
 (date,INTERVAL expr unit)
日付を加算(減算)した結果を返す。
unitに指定できる値は「unit引数に指定できる値」を参照。
date には、開始日を指定する。
expr には、加算(減算)する値を指定する。
DATE_ADD('1999-01-01', INTERVAL
 1 HOUR) ⇒ '1999-01-01 01:00:00'
DATE_ADD('1998-01-02', INTERVAL 31 DAY)
⇒ '1998-02-02'
DATE_SUB('2006-02-28', INTERVAL 1 MONTH)
⇒ '2006-01-28'
DATE_FORMAT(date,format) format文字列に合わせて、date値を形式設定する。
format文字列には表の指示子を指定する。
DATE_FORMAT(NOW()
 ,'%Y年%m月%d日 %H時%i分%s秒')
⇒ '2006年11月11日 10時54分13秒'
DAY(expr)
DAYOFMONTH(expr)
日付式または日付時刻式 expr の1〜31の日にちを返す。 DAY('2006-11-10 20:41:55')
⇒ 10
DAYOFWEEK(expr) 日付式または日付時刻式 expr の
曜日インデックス(1=日曜、2=月曜、... 7=土曜)を返す。
DAYOFWEEK('2006-11-10 20:41:55')
⇒ 6
DAYOFYEAR(expr) 日付式または日付時刻式 expr の
1 〜 366 の範囲の年間を通した日にちを返す。
DAYOFYEAR('2006-11-10 20:41:55')
⇒ 314
EXTRACT(unit FROM date) unitで指定した日付の一部を抽出する。
unitに指定できる値は「unit引数に指定できる値」を参照。
EXTRACT(YEAR_MONTH FROM NOW())
⇒ 200611
FROM_DAYS(N) 指定された日数 N に対して DATE 型の値を返す。 FROM_DAYS(729669) ⇒ '1997-10-07'
HOUR(time) time に指定された時刻の時間部分の値を返す。 HOUR('10:05:03') ⇒ 10
HOUR('272:59:59') ⇒ 272
LAST_DAY(date) 指定した日付の月の最後の日にちを返す。 LAST_DAY('2003-02-05') ⇒ '2003-02-28'
LAST_DAY('2004-01-01 01:01:01')
⇒ '2004-01-31'
MAKEDATE(year,dayofyear) 指定された年と年間を通した日にちに対応する日付を返す。 MAKEDATE(2006,31) ⇒ '2006-01-31'
MAKEDATE(2006,365) ⇒ '2006-12-31'
MAKEDATE(2004,365) ⇒ '2006-12-30'
MAKETIME(hour,minute,second) 引数に指定された値から、計算した時刻値を返す。 MAKETIME(12,15,30) ⇒ '12:15:30'
MICROSECOND(expr) マイクロ秒を、0〜999999 の範囲内の数値として返す。 MICROSECOND('12:00:00.123456')
⇒ 123456
MINUTE(time) 指定された時刻の分を0〜59の範囲の値として返す。 MINUTE('98-02-03 10:05:03')
⇒ 5
MONTH(date) 指定された日付の月を1〜12の範囲の値として返す。 MONTH('1998-02-03') ⇒ 2
MONTHNAME(date) date に指定された月の名前を返す。 MONTHNAME('1998-02-05')
⇒ 'February'
PERIOD_ADD(P,N) N に指定された月数を期間 P(YYMM または YYYYMM の形式)
に加える。戻り値は YYYYMM の形式で返る。
PERIOD_ADD(9801,2) ⇒ 199803
PERIOD_DIFF(P1,P2) 期間 P1 と P2 の間の月数を返す。
P1 と P2 の指定は YYMM または YYYYMM 形式で行う。
PERIOD_DIFF(9802,199703) ⇒ 11
QUARTER(date) date に指定された日付に対応する四半期を1〜4の範囲
の値として返す。
QUARTER('98-04-01') ⇒ 2
SECOND(time) time に指定された時刻の秒を0〜59の範囲の値として
返す。
SECOND('10:05:03') ⇒ 3
SEC_TO_TIME(seconds) 引数に指定された秒数を'HH:MM:SS' または HHMMSS
形式の値として返す。
SEC_TO_TIME(2378) ⇒ '00:39:38'
SEC_TO_TIME(2378) + 0 ⇒ 3938
STR_TO_DATE(str,format) DATE_FORMAT() 関数と逆の働きをする。
文字列strをformat形式で受け取り、DATETIME型で
返す。
format文字列には表の指示子を指定する。
STR_TO_DATE('2006/11/16','%Y/%m/%d')
⇒ 2006-11-16
SUBDATE(date,INTERVAL expr type)
SUBDATE(expr,days)
INTERVAL を指定する形式は、DATE_SUB()のシノニム。
2番目の形式のdays には expr から差し引く日数を指定する。
SUBDATE('1998-01-02', INTERVAL 31 DAY)
⇒ '1997-12-02'
SUBDATE('1998-01-02 12:00:00', 31)
⇒ '1997-12-02 12:00:00'
SUBTIME(expr,expr2) expr から expr2 を差し引いた結果が返される。
expr には日付(時刻)式を指定し、expr2 には時刻式を
指定する。
SUBTIME('2006-11-16 20:00','1:1:1')
⇒ '2006-11-16 18:58:59'
TIME(expr) 時刻式または日付時刻式 expr の時刻部分を取り出す。 TIME('2003-12-31 01:02:03')
⇒ '01:02:03'
TIMEDIFF(expr,expr2) 開始時刻exprと終了時刻expr2の間の時間が返される。 TIMEDIFF('1997-12-31 23:59:59.000001',
  '1997-12-30 01:01:01.000002')
⇒ '46:58:57.999999'
TIMESTAMP(expr)
TIMESTAMP(expr,expr2)
日付(時刻)式 expr を日付時刻値として返す。
引数が 2 つの場合は、日付式または日付時刻式 expr
に時刻式 expr2 を加えた結果を日付時刻値として返す。
TIMESTAMP('2003-12-31')
⇒ '2003-12-31 00:00:00'
TIMESTAMP('2003-12-31 12:00:00','12:00:00')
⇒ '2004-01-01 00:00:00'
TIME_FORMAT(time,format) 日付(時刻)式 expr を日付時刻値として返す。
DATE_FORMAT()関数に似ているが、format に指定できる
文字列は、時分秒を処理する形式指定子に限られる。
TIME_FORMAT('100:00:00',
  '%H %k %h %I %l')
⇒ '100 100 04 04 4'
TIME_TO_SEC(time) time 引数に指定された時刻を秒数に変換して返す。 TIME_TO_SEC('22:23:00')
⇒ 80580
TO_DAYS(date) date に指定された日付を日数(年0からの通し日数)
に変換して返す。
TO_DAYS('1997-10-07')
⇒ 729669
WEEK(date [,mode]) date に指定された日付に対応する週数を返す。 WEEK('1998-12-31',1)
⇒ 53
WEEKDAY(date) date に指定された日付の曜日インデックス
(0 = 月曜、1 = 火曜、... 6 = 日曜)を返す。
WEEKDAY('1998-02-03 22:23:00')
⇒ 1
WEEKOFYEAR(date) 指定された日付のカレンダ上の週を、1〜53の
数値として返す。
WEEKOFYEAR('1998-02-20')
⇒ 8
YEAR(date) date に指定された日付の年を数値として返す。 YEAR('98-02-03') ⇒ 1998
YEARWEEK(date)
YEARWEEK(date,start)
指定された日付の年と週を返す。 YEARWEEK('1987-01-01') ⇒ 198653

unit引数に指定できる値

DATE_ADD、DATE_SUB関数のunit引数とexpr引数がどのように関連するか以下に示す。

unit値 前提となるexprの形式
SECOND
MINUTE
HOUR
DAY
MONTH
YEAR
MINUTE_SECOND '分:秒'
HOUR_MINUTE '時:分'
DAY_HOUR '日 時'
YEAR_MONTH '年-月'
HOUR_SECOND '時:分:秒'
DAY_MINUTE '日 時:分'
DAY_SECOND '日 時:分:秒'
DAY_MICROSECOND '日.ミリ秒'
HOUR_MICROSECOND '時.ミリ秒'
MINUTE_MICROSECOND '分.ミリ秒'
SECOND_MICROSECOND '秒.ミリ秒'
MICROSECOND 'ミリ秒'

format文字列に指定できる指示子

DATE_FORMAT、STR_TO_DATE関数などのformat文字列には以下を指定する。

指示子 説明
%M 月の名前(January..December)
%W 曜日名(Sunday..Saturday)
%D 英語のサフィックス付きの日付(0th、1st、2nd、3rd など)
%Y 4 桁の数値で表した年
%y 2 桁の数値で表した年
%a 略式の曜日名(Sun..Sat)
%d 数値で表した日付(00..31)
%e 数値で表した日付(0..31)
%m 数値で表した月(00..12)
%c 数値で表した月(0..12)
%b 略式の月名(Jan..Dec)
%j 年間を通した日にち(001..366)
%H 時(00..23)
%k 時(0..23)
%h 時(01..12)
%I 時(1..12)
%i 数値で表した分(00..59)
%r 12 時間形式の時刻(hh:mm:ss に続けて AM または PM)
%T 24 時間形式の時刻(hh:mm:ss)
%S 秒(00..59)
%s 秒(00..59)
%f マイクロ秒(000000..999999)
%p AM または PM
%w 曜日(0=Sunday..6=Saturday)
%% リテラルの ‘%’


インデックスへ戻る


おすすめ書籍


現場で使える MySQL (DB Magazine SELECTION)

著者:松信 嘉範
出版社:翔泳社(2006-03-17)
価格:¥2,730(税込)
MySQL 徹底入門 第2版

著者:遠藤 俊裕、坂井 恵、館山 聖司、鶴長 鎮一、とみた まさひろ、班石 悦夫、松信 嘉範
出版社:翔泳社(2006-01-24)
価格:¥3,654(税込)


ページTopへ / ▲Homeへ