English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MySQL 関数

MySQLには多くの内蔵関数があります。以下にこれらの関数の説明を示します。

MySQL文字列関数

関数説明
ASCII(s)文字列 s の最初の文字の ASCII コードを返します。

CustomerName フィールドの最初の文字の ASCII コードを返します:

SELECT ASCII(CustomerName) AS NumCodeOfFirstChar
FROM Customers;
CHAR_LENGTH(s)文字列 s の文字数を返します

文字列 w3codeboxの文字数

SELECT CHAR_LENGTH("w3codebox") AS LengthOfString;
CHARACTER_LENGTH(s)文字列 s の文字数を返します

文字列 w3codeboxの文字数

SELECT CHARACTER_LENGTH("w3codebox") AS LengthOfString;
CONCAT(s1,s2...sn)字符串 s1,s2 等多个文字列を一つの文字列に結合します

複数の文字列を結合する

SELECT CONCAT("SQL ", "w3codebox ", "Gooogle ", "Facebook") AS ConcatenatedString;
CONCAT_WS(x, s1,s2...sn)CONCAT(s1,s2、...関数ですが、各文字列の間に x を追加する必要があります。x は区切り文字です。

合并多个字符串,并添加分隔符:

SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString;
FIELD(s,s1,s2...)返回第一個字符串 s 在字符串列表(s1,s2...)中的位置

返回字符串 c 在列表值中的位置:

SELECT FIELD("c", "a", "b", "c", "d", "e");
FIND_IN_SET(s1,s2)返回在字符串s2中與s1匹配的字符串的位置

返回字符串 c 在指定字符串中的位置:

SELECT FIND_IN_SET("c", "a,b,c,d,e");
FORMAT(x,n)函數可以將數字 x 进行格式化 "#,###.##", 將 x 保留到小數點後 n 位,最後一位四捨五入。

格式化數字 "#,###.##" 形式:

SELECT FORMAT(250500.5634, 2);     -- 输出 250,500.56
INSERT(s1,x,len,s2)字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串

从字符串第一个位置开始的 6 個字符替换为 w3codebox:

SELECT INSERT("google.com", 1, 6, "w3codebox");  -- 输出:oldtoolbag.com
LOCATE(s1,s)FROM s)1 文字列 s

获取 b 在字符串 abc 中的位置:

SELECT LOCATE('st','myteststring');  -- 5

の開始位置

SELECT LOCATE('b', 'abc') -- 2
LCASE(s)將字符串 s 的所有字母變成小寫字母

字符串 w3codebox 轉換為小寫:

SELECT LCASE('w3codebox') -- w3codebox
LEFT(s,n)返回字符串 s 的前 n 個字符

文字列 w3codebox 中的前兩個字符:

SELECT LEFT('w3codebox',2) -- ru
LOWER(s)將字符串 s 的所有字母變成小寫字母

字符串 w3codebox 轉換為小寫:

SELECT LOWER('w3codebox') -- w3codebox
LPAD(s1,len,s2)文字列 s1 的開始處填充字符串 s2,使字符串長度達到 len

将字符串 xx 填充到 abc 字符串的開始處:

SELECT LPAD('abc',5,'xx') -- xxabc
LTRIM(s)去掉字符串 s 開始处的空格

文字列w3codebox開始处的空格:

SELECT LTRIM("    w3codebox") AS LeftTrimmedString;-- w3codebox
codebox") AS LeftTrimmedString;MID(s,n,len)

文字列wから3codeboxの第 2 位置から切り取ります 3文字:

文字列 s の n 位置から長さ len の部分文字列を切り取ります、SUBSTRING(s,n,len)と同じです3codebox", 2, 3) AS ExtractString; -- UNO
SELECT MID("w1 POSITION(sFROM s)1 文字列 s

の開始位置

文字列 abc における b の位置を返します: -- 2
SELECT POSITION('b' in 'abc')REPEAT(s,n)

文字列w3文字列 s を n 回繰り返します

codebox を 3 回繰り返します:3codebox',3) -- w3SELECT REPEAT('w3SELECT REPEAT('w3codebox
codeboxw1,s2)REPLACE(s,s2 文字列 s における文字列 s1

文字列 abc における文字 a を文字 x に置き換えます:

SELECT REPLACE('abc','a','x') --xbc
REVERSE(s)文字列 s の順序を逆転します

文字列 abc の順序を逆転します:

SELECT REVERSE('abc') -- cba
RIGHT(s,n)文字列 s の後 n 文字を返します

文字列 w3codeboxの後2文字:

SELECT RIGHT('w3codebox',2) -- ob
RPAD(s1,len,s2)文字列 s1 の末尾に文字列 s2、文字列の長さを len

文字列 xx を abc 文字列の末尾に埋め込みます:

SELECT RPAD('abc',5,'xx') -- abcxx
RTRIM(s)文字列 s の末尾のスペースを取り除きます

文字列w3codeboxの末尾のスペース:

SELECT RTRIM("w3codebox     ") AS RightTrimmedString;   -- w3codebox
SPACE(n)n つの空きスペースを返します

以下を返します 10 空きスペース:

SELECT SPACE(10);
STRCMP(s1,s2)比較する文字列 s1 と s2、s が1 と s2 相等な場合 0 を返します、s1>s2 以下を返します 1、s が1<s2 以下を返します -1

比較する文字列:

SELECT STRCMP("w3codebox", "w3codebox");  -- 0
SUBSTR(s, start, length)文字列 s の start 位置から length 長の部分文字列を切り取ります

文字列wから3codeboxの第 2 位置から切り取ります 3文字:

SELECT SUBSTR("w3codebox", 2, 3) AS ExtractString; -- UNO
SUBSTRING(s, start, length)文字列 s の start 位置から length 長の部分文字列を切り取ります

文字列wから3codeboxの第 2 位置から切り取ります 3文字:

SELECT SUBSTRING("w3codebox", 2, 3) AS ExtractString; -- UNO
SUBSTRING_INDEX(s, delimiter, number)文字列sのnumber番目に現れる区切り文字delimiterの後の文字列を返します。
numberが正の数の場合、number番目の文字の左側の文字列を返します。
numberが負の数の場合、numberの絶対値から右側に数えたnumber番目の文字の右側の文字列を返します。
SELECT SUBSTRING_INDEX('a*b','*',1) -- a
SELECT SUBSTRING_INDEX('a*b','*',-1)    -- b
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1)    -- c
TRIM(s)文字列sの先頭と末尾のスペースを取り除きます

文字列w3codeboxの先頭と末尾のスペース:

SELECT TRIM('    w3codebox  ') AS TrimmedString;
UCASE(s)文字列を大文字に変換

文字列w3codeboxを大文字に変換:

SELECT UCASE("w3codebox"); -- w3codebox
UPPER(s)文字列を大文字に変換

文字列w3codeboxを大文字に変換:

SELECT UPPER("w3codebox"); -- w3codebox

MySQLの数値関数

関数名説明
ABS(x)xの絶対値を返します  

以下を返します -1 の絶対値:

SELECT ABS(-1) -- 以下を返します1
ACOS(x)xの反余弦値を求めます(引数は弧度)
SELECT ACOS(0.25);
ASIN(x)角度の反余弦値を求めます(引数は弧度)
SELECT ASIN(0.25);
ATAN(x)角度の反正弦値を求めます(引数は弧度)
SELECT ATAN(2.5);
ATAN2(n, m)角度の反正弦値を求めます(引数は弧度)
SELECT ATAN2(-0.8, 2);
AVG(expression)expressionというフィールドの平均値を返します

ProductsテーブルのPriceフィールドの平均値を返します:

SELECT AVG(Price) AS AveragePrice FROM Products;
CEIL(x)xがもつ最小の整数でx以上の値を返します 
SELECT CEIL(1.5) -- 以下を返します2
CEILING(x) xがもつ最小の整数でx以上の値を返します 
SELECT CEILING(1.5); -- 以下を返します2
COS(x)角度の余弦値を求めます
SELECT COS(2);
COT(x)余切値(引数がラジアン)を求めます
SELECT COT(6);
COUNT(expression)クエリのレコード数を返します。expressionパラメータはフィールドまたは * 号

Productsテーブルのproductsフィールドの全てのレコードの数を返します:

SELECT COUNT(ProductID) AS NumberOfProducts FROM Products;
DEGREES(x)ラジアンを角度に変換します  
SELECT DEGREES(3.1415926535898) -- 180
n DIV mnが被除数、mが除数の整数除算です

計算 10 除して 5:

SELECT 10 DIV 5;  -- 2
EXP(x)eのx乗を返します  

eの3乗を計算:

SELECT EXP(3) -- 20.085536923188
FLOOR(x)x以下の最大の整数を返します  

以下 1.5 の整数:

SELECT FLOOR(1.5) -- 以下を返します1
GREATEST(expr1, expr2, expr3, ...)リストの最大値を返します

以下の数字リストの最大値を返します:

SELECT GREATEST(3, 12, 34, 8, 25); -- 34

以下の文字列リストの最大値を返します:

SELECT GREATEST("Google", "w3codebox", "Apple");   -- w3codebox
LEAST(expr1, expr2, expr3, ...)リストの最小値を返します

以下の数字リストの最小値を返します:

SELECT LEAST(3, 12, 34, 8, 25); -- 3

以下の文字列リストの最小値を返します:

SELECT LEAST("Google", "w3codebox", "Apple");   -- Apple
LN数字の自然対数を返します。eを底とします。

以下を返します 2 の自然対数:

SELECT LN(2);  -- 0.6931471805599453
LOG(x) または LOG(base, x)自然対数(eを底とする対数)を返します。baseパラメータが指定されている場合、baseが指定された底数です。  
SELECT LOG(20.085536923188) -- 3
SELECT LOG(2, 4); -- 2
LOG10(x)以下に返します 10 底の対数  
SELECT LOG10(100) -- 2
LOG2(x)以下に返します 2 底の対数

以下に返します 2 底 6 の対数:

SELECT LOG2(6);  -- 2.584962500721156
MAX(expression)フィールド expression の最大値を返します

データベーステーブル Products のフィールド Price の最大値を返します:

SELECT MAX(Price) AS LargestPrice FROM Products;
MIN(expression)フィールド expression の最小値を返します

データベーステーブル Products のフィールド Price の最小値を返します:

SELECT MIN(Price) AS MinPrice FROM Products;
MOD(x,y)xをyで除した後の余りを返します 

5 除して 2 の余り:

SELECT MOD(5,2) -- 1
PI()円周率を返します(3.141593)  
SELECT PI() --3.141593
POW(x,y)xのy乗を返します 

2 の 3 乗です:

SELECT POW(2,3) -- 8
POWER(x,y)xのy乗を返します 

2 の 3 乗です:

SELECT POWER(2,3) -- 8
RADIANS(x)角度を弧度に変換します  

180度を弧度に変換します:

SELECT RADIANS(180) -- 3.1415926535898
RAND()0から 1 のランダム数  
SELECT RAND() --0.93099315644334
ROUND(x)xに最も近い整数を返します
SELECT ROUND(1.23456) --1
SIGN(x)xの符号を返します、xが負数、0、正数の場合それぞれ返します -1、0 そして 1 
SELECT SIGN(-10) -- (-1)
SIN(x)放射度の引数で正弦値を求めます  
SELECT SIN(RADIANS(30)) -- 0.5
SQRT(x)xの平方根を返します  

25 の平方根:

SELECT SQRT(25) -- 5
SUM(expression)指定されたフィールドの合計を返します

OrderDetails テーブルの Quantity フィールドの合計を計算します:

SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
TAN(x)放射度の引数で正接値を求めます
SELECT TAN(1.75);  -- -5.52037992250933
TRUNCATE(x,y)数値 x を小数点以下 y 位に四捨五入せずに返します(ROUNDとの最大の違いは四捨五入しないことです)
SELECT TRUNCATE(1.23456,3) -- 1.234

MySQL 日期関数

関数名説明
ADDDATE(d,n)計算開始日 d に n 日を加えた日付
SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
->2017-06-25
ADDTIME(t,n)n は時間表現であり、時間 t に時間表現 n を加えます

加 5 秒:

SELECT ADDTIME('2011-11-11 11:11:11', 5);
->2011-11-11 11:11:16 (秒)

追加 2 時間, 10 分, 5 秒:

SELECT ADDTIME("2020-06-15 09:34:21", "2:10:5"); 
-> 2020-06-15 11:44:26
CURDATE()現在の日付を返します
SELECT CURDATE();
-> 2018-09-19
CURRENT_DATE()現在の日付を返します
SELECT CURRENT_DATE();
-> 2018-09-19
CURRENT_TIME現在の時間を返します
SELECT CURRENT_TIME();
-> 19:59:02
CURRENT_TIMESTAMP()返回当前日期和时间
SELECT CURRENT_TIMESTAMP();
-> 2018-09-19 20:57:43
CURTIME()現在の時間を返します
SELECT CURTIME();
-> 19:59:02
DATE()日付または日付時間表現から日付値を抽出します
SELECT DATE("2017-06-15");    
-> 2017-06-15
DATEDIFF(d1,d2)日付dを計算します1->d2 の間の日数
SELECT DATEDIFF('2001-01-01','2001-02-02")
-> -32
DATE_ADD(d,INTERVAL expr type)開始日付dに指定された期間を加えた日付を計算します
SELECT ADDDATE('2011-11-11 11:11:11',1)
-> 2011-11-12 11:11:11    (默认是天)
SELECT ADDDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE)
-> 2011-11-11 11:16:11 (TYPEの値は上記の関数と同様です)
DATE_FORMAT(d,f)表現fの要求に従って日付dを表示します
SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r')
-> 2011-11-11 11:11:11 AM
DATE_SUB(date,INTERVAL expr type)関数を使用して指定された時間間隔を日付から引きます。

OrdersテーブルのOrderDateフィールドから 2 日:

SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
FROM Orders
DAY(d)日付値dの日付部分を返します
SELECT DAY("2017-06-15");  
-> 15
DAYNAME(d)日付dが何曜日かを返します、例:Monday,Tuesday
SELECT DAYNAME('2011-11-11 11:11:11")
->金曜日
DAYOFMONTH(d)日付dがその月の何日目であるかを計算します
SELECT DAYOFMONTH('2011-11-11 11:11:11")
->11
DAYOFWEEK(d)日付dが今日は何曜日か、1 日曜日、2 月曜日、その次に...
SELECT DAYOFWEEK('2011-11-11 11:11:11")
->6
DAYOFYEAR(d)日付dがその年の何日目であるかを計算します
SELECT DAYOFYEAR('2011-11-11 11:11:11")
->315
EXTRACT(type FROM d)日付dから指定された値を取得します、typeで返される値を指定します。
typeの値は以下の通りです:
  • MICROSECOND

  • SECOND

  • MINUTE

  • HOUR

  • DAY

  • WEEK

  • MONTH

  • QUARTER

  • YEAR

  • SECOND_MICROSECOND

  • MINUTE_MICROSECOND

  • MINUTE_SECOND

  • HOUR_MICROSECOND

  • HOUR_SECOND

  • HOUR_MINUTE

  • DAY_MICROSECOND

  • DAY_SECOND

  • DAY_MINUTE

  • DAY_HOUR

  • YEAR_MONTH

SELECT EXTRACT(MINUTE FROM '2011-11-11 11:11:11") 
-> 11
FROM_DAYS(n)0000年から 1 月 1 日をn日後の日付にします。
SELECT FROM_DAYS(1111)
-> 0003-01-16
HOUR(t)tにおける時間の値を返却します。
SELECT HOUR('1:2:3")
-> 1
LAST_DAY(d)指定された日付のその月の最終日を返却します。
SELECT LAST_DAY("2017-06-20");
-> 2017-06-30
LOCALTIME()返回当前日期和时间
SELECT LOCALTIME()
-> 2018-09-19 20:57:43
LOCALTIMESTAMP()返回当前日期和时间
SELECT LOCALTIMESTAMP()
-> 2018-09-19 20:57:43
MAKEDATE(year, day-of-year)指定されたパラメータの年 year とその年の日付順序 day-of-year 返却する日付
SELECT MAKEDATE(2017, 3);
-> 2017-01-03
MAKETIME(hour, minute, second)時間を組み合わせます。パラメータは、時間、分、秒です。
SELECT MAKETIME(11, 35, 4);
-> 11:35:04
MICROSECOND(date)日付パラメータに対応するマイクロ秒数を返却します。
SELECT MICROSECOND("2017-06-20 09:34:00.000023");
-> 23
MINUTE(t)tにおける分の値を返却します。
SELECT MINUTE('1:2:3")
-> 2
MONTHNAME(d)日付中の月の名前を返却します。例えば、November
SELECT MONTHNAME('2011-11-11 11:11:11")
-November
MONTH(d)日付dにおける月の値を返却します。1 まで 12
SELECT MONTH('2011-11-11 11:11:11")
->11
NOW()返回当前日期和时间
SELECT NOW()
-> 2018-09-19 20:57:43
PERIOD_ADD(period, number)年-月を組み合わせた日付に一つの期間を追加します。
SELECT PERIOD_ADD(201703, 5);   
-> 201708
PERIOD_DIFF(period1, period2)二つの期間間の月の差を返却します。
SELECT PERIOD_DIFF(201710, 201703);
-> 7
QUARTER(d)返却日dが何四半期であるかを返却します。 1 まで 4
SELECT QUARTER('2011-11-11 11:11:11")
-> 4
SECOND(t)返回 t 中的秒钟值
SELECT SECOND('1:2:3")
-> 3
SEC_TO_TIME(s)将以秒为单位的时间 s 转换为时分秒的格式
SELECT SEC_TO_TIME(4320)
-> 01:12:00
STR_TO_DATE(string, format_mask)将字符串转变为日期
SELECT STR_TO_DATE("August 10 2017", "%M %d %Y");
-> 2017-08-10
SUBDATE(d,n)日期 d 减去 n 天后的日期
SELECT SUBDATE('2011-11-11 11:11:11', 1)
->2011-11-10 11:11:11 (默认是天)
SUBTIME(t,n)时间 t 减去 n 秒的时间
SELECT SUBTIME('2011-11-11 11:11:11', 5)
->2011-11-11 11:11:06 (秒)
SYSDATE()返回当前日期和时间
SELECT SYSDATE()
-> 2018-09-19 20:57:43
TIME(expression)提取传入表达式的时间部分
SELECT TIME('19:30:10");
-> 19:30:10
TIME_FORMAT(t,f)按表达式 f 的要求显示时间 t
SELECT TIME_FORMAT('11:11:11,'%r')
11:11:11 AM
TIME_TO_SEC(t)将时间 t 转换为秒
SELECT TIME_TO_SEC('1:12:00')
-> 4320
TIMEDIFF(time1, time2)计算时间差值
SELECT TIMEDIFF("13:10:11", "13:10:10");
-> 00:00:01
TIMESTAMP(expression, interval)单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和
SELECT TIMESTAMP("2017-07-23",  "13:10:11");
-> 2017-07-23 13:10:11
TO_DAYS(d)计算日期 d 距离 0000 年 1 月 1 日的天数
SELECT TO_DAYS('0001-01-01 01:01:01")
-> 366
WEEK(d)计算日期 d 是本年的第几个星期,范围是 0 到 53
SELECT WEEK('2011-11-11 11:11:11")
-> 45
WEEKDAY(d)日期 d 是星期几,0 表示星期一,1 表示火曜日
SELECT WEEKDAY("2017-06-15");
-> 3
WEEKOFYEAR(d)计算日期 d 是本年的第几个星期,范围是 0 到 53
SELECT WEEKOFYEAR('2011-11-11 11:11:11")
-> 45
YEAR(d)返回年份
SELECT YEAR("2017-06-15");
-> 2017
YEARWEEK(date, mode)返回年份及第几周(0到53),mode 中 0 表示日曜日,1を表す、火曜日など
SELECT YEARWEEK("2017-06-15");
-> 201724

MySQL 高度関数

関数名説明
BIN(x)x のバイナリ符号を返す

15 の 2 進数符号:

SELECT BIN(15); -- 1111
BINARY(s)文字列 s をバイナリ文字列に変換する
SELECT BINARY "w3codebox";
-> w3codebox
CASE expression
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
   ...
    WHEN conditionN THEN resultN
    ELSE result
END
CASE は関数の開始を示し、END は関数の終了を示します。条件があれば1 成立した場合、result を返す1, 条件があれば2 成立した場合、result を返す2、すべてが成立しない場合に result を返し、あるがあれば、その後の処理は実行されない。
SELECT CASE 
  WHEN 1 > 0
  THEN '1 > 0'
  WHEN 2 > 0
  THEN '2 > 0'
  ELSE '3 > 0'
  END
->1 > 0
CAST(x AS type)データ型の変換

文字列データを日付に変換:

SELECT CAST("2017-08-29" AS DATE);
-> 2017-08-29
COALESCE(expr1, expr2, ...., expr_n)パラメータの最初の非空表現(左から右)を返す
SELECT COALESCE(NULL, NULL, NULL, 'oldtoolbag.com', NULL, 'google.com');
-> oldtoolbag.com
CONNECTION_ID()ユニークな接続 ID を返す
SELECT CONNECTION_ID();
-> 4292835
CONV(x,f1,f2)f を返す1 進数を f に変換する2 進数
SELECT CONV(15, 10, 2);
-> 1111
CONVERT(s USING cs)文字列 s の文字セットを cs に変換する関数
SELECT CHARSET('ABC')
->utf-8    
SELECT CHARSET(CONVERT('ABC' USING gbk))
->gbk
CURRENT_USER()現在のユーザーを返します
SELECT CURRENT_USER();
-> guest@%
DATABASE()現在のデータベース名を返す
SELECT DATABASE();   
-> w3codebox
IF(expr,v1,v2)表达式 expr が成立した場合、結果 v を返す1;それ以外の場合、結果 v を返す2。
SELECT IF(1 > 0,'正確','誤り')    
->正しい
IFNULL(v1,v2)もし v1 の値が NULL でない場合に v1、それ以外の場合に v2。
SELECT IFNULL(null,'Hello Word')
->Hello Word
ISNULL(expression)式が NULL であるかどうかを判断します
SELECT ISNULL(NULL);
->1
LAST_INSERT_ID()最近生成された AUTO_INCREMENT 値を返します
SELECT LAST_INSERT_ID();
->6
NULLIF(expr1, expr2)二つの文字列を比較し、expr1 expr2 expr が NULL でない場合に相等を返し、それ以外の場合に expr を返します1
SELECT NULLIF(25, 25);
->
SESSION_USER()現在のユーザーを返します
SELECT SESSION_USER();
-> guest@%
SYSTEM_USER()現在のユーザーを返します
SELECT SYSTEM_USER();
-> guest@%
USER()現在のユーザーを返します
SELECT USER();
-> guest@%
VERSION()データベースのバージョン番号を返します
SELECT VERSION()
-> 5.6.34