1. ホーム
  2. SQL

MySQL - ストアドプロシージャ (データ型、関数)

2022-02-21 03:25:39
<パス

記事目次


MySQLストアドプロシージャ

使用環境:8.0.12 MySQL+win10、環境によって若干異なる場合があります。

I. ストアドプロシージャと関数

  • ストアドプロシージャは、コードの一部をカプセル化し、そのコードの一部を実行するときにプロシージャを呼び出すことで実装できるという点で、関数と似ています。カプセル化されたステートメント本体の内部では、if/else、case、whileなどのSQLプログラミングを可能にする制御構造を使用することができます。
  • createキーワードを使用する関数とは異なり 作成関数 関数名 を使用し、ストアドプロシージャは プロシージャの作成 プロシージャ名 を作成します。
  • 一方、このプロシージャには戻り値がなく、関数は最終的に リターン変数名 を返します。

II. コマンドラインエンドマーカー記号

  • デフォルトでは、mysql のエンドマーカー区切り記号はセミコロン ';' です。セミコロンを入力した後に Enter キーを押すと、mysql はコマンドをコミットします。ストアドプロシージャを使用する場合、デフォルトのエンドマーカーはストアドプロシージャ文のセミコロンと衝突し、プロシージャ文が終了する前にコミットされてしまい、その結果エラーが報告されることになるのです。そのため、プロシージャを作成する前に、通常はフラグを別のシンボルとして宣言します。例えば、'$'などですが、他の記号でもかまいません。
  • <マーク デリミタ宣言文の後にセミコロン ';' がないことに注意
    delimiter $
    
    

III. 変数の使用について

1. ローカル変数

  • プロシージャの中では、declare を使ってローカル変数を宣言します。これは、プロシージャの begin...end 複合文の中で、文の冒頭でのみ使用することができます。
  • 変数にデフォルト値を設定するには、default節(値は定数でも式で指定してもよい)を使用し、デフォルト値がない場合は、その変数は初期値としてヌル値を持つ。
    # Declare the i variable to be of type int, with an initial value of 10.
    declare i int default 10
    
    
    
  • 使用する前に定義する、未定義の変数、selectはnullを返します。
  • ローカル変数は、プロシージャ内のみに存在し、プロシージャ文が終了すると消滅します。これに対して、ユーザー変数は、プロシージャの内部でも外部でも使用することができます。

2. ユーザー変数

  • ローカル変数は@記号のない変数名のみ、ユーザー変数名は@記号が先行します。
  • ストアドプロシージャを使用するために、あらかじめ設定されたユーザー変数を渡すこともできます。ユーザー変数には、'@'で始まる名前が付けられています。
    set @a = 10
    delimiter $
    create procedure p1(inout num int)
    begin
    	num = num + 1
    	select num;
    end$
    delimiter ;
    # We then call the procedure
    call p1(@a)
    select @a; -- 11
    
    
    
  • ユーザー変数のパラメータタイプ:in、out、inout
    <マーク パラメータの種類に名前がついているため、その違いを説明します。
  • in: プロシージャは呼び出すことができるが、プロシージャの呼び出しによって変数が変更された後、変数は変更されない のみ入出力 . あらかじめユーザー変数を設定し、手続き中に変更可能な値を設定しておくが、変更は手続き内部でしか機能しない。プロシージャが終了すると、元の値が返されます。
  • inout: 渡すことができ、プロシージャ内で変更可能で、その結果はプロシージャ終了後にも有効です。例えば、上記の場合、ユーザー変数@aは、渡されると10となり、プロシージャの+1は、パラメータを出力すると11となる。 入力と終了ができます。
  • out: 変数はnullとしてプロシージャに渡されますが(つまり、変数の元の値をプロシージャに渡すことはできません)、プロシージャを変更した後は、その変数の変更もプロシージャの終了後に有効となります。 を出しています。

3. プロシージャの結果を変数に代入するいくつかの方法

  • 方法1
delcare num int default 0
select count(*) into num from table_name;
select num;


  • 方法2
#We'll use the following user variable for an example, and note that the method adds parentheses to the outside of the query statement.
set @num = (select count(*) into num from table_name);
select @num;


  • 方法3
# Multi-result assignment to variables
select min(sales), max(sales) into @min, @max from table_name group by month(date);



IV. ストアドプロシージャの表示、削除、呼び出し、作成

1. ストアドプロシージャの表示

show procedure status;
# View the contents of the create procedure_name procedure.
show create procedure procedure_name;


2. ストアドプロシージャの削除

drop procedure if exists procedure_name


3. ストアドプロシージャを呼び出す

call procedure_name()
# If the variable @a is passed in
call procedure_name(@a)


4. ストアドプロシージャの作成

create procedure プロシージャ名 ([[in|out|inout] パラメータ名 データ型 [,[in|out|inout] パラメータ名 データ型 ...]]) プロシージャ本体
プロシージャ本体はbeginで始まりendで終わる、例。

delimiter $ -- Modify the end marker
set @n := 10 -- Set the user variable @n, assigning it the value 10
create procedure p_test(in n int) -- Variable n parameter is in, only in.
declare i int default 10; -- declare local variable i, set default 10
declare num varchar(10) ; -- The delcare statement is placed at the beginning of the begin-end compound statement.
set num := "num variable assignment" ; -- assign a value to the variable num
set n := 100 + n; -- We try to change the user variable to 100 + n
begin -- the procedure begins
	select i, num, n; -- inside the procedure, where the n change is valid.
end$ -- end of procedure
delimiter ; -- restore the end marker
call p_test(@n)
select @n; -- Because the n parameter of the procedure is in, only in, where @n returns the original value: 10




V. 制御構造文

<マーク 使用する際は、文の各所にあるセミコロンに注意する必要があります

1. judge-ifの使用について

set @num = 75;
delimiter $
create procedure p1(in num int)
begin
	declare score char(3);
	if num >80 then 
		set score = "excellent";
	elseif num >= 60 then 
		set score = "Pass";
	else 
		set score = "fail";
	end if;
select score;
end$
delimiter ;
call p1(@num);


2. 判定ケースを使用する場合

set @num = 75;
delimiter $
create procedure p2(in num int)
begin
	declare score char(3);
	case num
	when ">80" then 
		set score = "excellent";
	when ">= 60" then 
		set score = "Pass";
	else 
		set score = "fail";
	end case;
select score;
end$
call p2(@num)$


3. while ループ

set @num = 10;
delimiter $
create procedure p3(n smallint)
begin
	declare i int;
	declare s float;
	set s = 0;
	set i = 0;
	while i < n do
		set i = i + 1;
		set s = s + i;
	end while;
	select s;
end$
call p3(@num)$


4. 繰り返しループ

until+condition: ループを終了する

delimiter $
set @n = 10$
create procedure p4(n smallint)
begin
	declare i int;
	declare s int;
	set s = 0;
	set i = 0;
	repeat
		set i = i + 1;
		set s = s + i;
		until i = 10
	end repeat;
	select s;
end$
call p4(@n)$


5. ループ ループ

ここではループ名'myloop'はカスタマイズ可能で、leaveはループの終了を意味します。

delimiter $
set @n = 10$
create procedure p5(n smallint)
begin
	declare i int;
	declare s int;
	set s = 0;
	set i = 0;
	myloop : loop
		set i = i + 1;
		set s = s + i;
		if i = 10 then
			leave myloop;
		end if;
	end loop myloop;
	select s;
end$
call p5(@num)$



VI. データ型の紹介

ここにそのまま転載: https://www.runoob.com/mysql/mysql-data-types.html
シェアしてくれてありがとう~~~。

MySQL のデータフィールドのタイプを定義することは、データベースを最適化するために非常に重要です。

MySQLは様々な型をサポートしており、大きく分けて「数値型」「日付・時刻型」「文字列(キャラクタ)型」の3つがあります。


1. 数値の種類

MySQL は標準的な SQL の数値データ型をすべてサポートしています。

これには、厳密な数値データ型 (INTEGER、SMALLINT、DECIMAL、および NUMERIC) と近似的な数値データ型 (FLOAT、REAL、および DOUBLE PRECISION) が含まれます。

キーワードINTはINTEGERの同義語、キーワードDECはDECIMALの同義語です。

BITデータ型はビットフィールド値を保持し、MyISAM、MEMORY、InnoDB、およびBDBテーブルをサポートします。

標準SQLの拡張として、MySQLはTINYINT、MEDIUMINT、BIGINTの各整数型もサポートしています。以下の表は、各整数型に必要なストレージと範囲を示しています。

<テーブル タイプ サイズ 範囲(符号付き) レンジ(符号なし) 使用方法 TINYINT 1バイト (-128, 127) (0, 255) 小さな整数値 SMALLINT 2バイト (-32 768, 32 767) (0, 65 535) 大きな整数値 メディアミント 3バイト (-8 388 608, 8 388 607) (0, 16 777 215) 大きな整数値 INTまたはINTEGER 4バイト (-2 147 483 648, 2 147 483 647) (0, 4 294 967 295) 大きな整数値 BIGINT 8バイト (-9,223,372,036,854,775,808, 9,223 372 036 854 775 807) (0, 18 446 744 073 709 551 615) 非常に大きな整数値 フロート 4バイト (-3.402 823 466 e+38, -1.175 494 351 e-38), 0, (1.175 494 351 e-38, 3.402 823 466 351 e+38) 0, (1.175 494 351 e-38, 3.402 823 466 e+38) 単精度
浮動小数点数 DOUBLE 8バイト (-1.797 693 134 862 315 7 e+308, -2.225 073 858 507 201 4 e-308), 0, (2.225 073 858 507 201 4 e-308, 1.797 693 134 862 315 7 e+308) 0, (2.225 073 858 507 201 4 e-308, 1.797 693 134 862 315 7 e+308) 倍精度
浮動小数点数 デシマル DECIMAL(M,D)の場合、M>DならM+2、そうでなければD+2 MとDの値による M と D の値に依存する。 小さい値

2. 日付と時刻の種類

時刻の値を表す日付と時刻の型には、DATETIME、DATE、TIMESTAMP、TIME、YEARがあります。

各時間型には有効な値の範囲と、MySQL が表現することが合法でない値を指定するときに使用する "ゼロ" 値があります。

TIMESTAMP型は、後述する独自の自動更新機能を備えています。

<テーブル タイプ サイズ
(バイト) 範囲 フォーマット 使用方法 日付 3 1000-01-01/9999-12-31 YYYY-MM-DD 日付の値 時間 3 '-838:59:59'/'838:59:59' HH:MM:SS 時間値または持続時間 年 1 1901/2155 YYYY 年 値 データタイム 8 1000-01-01 00:00:00/9999-12-31 23:59:59 yyyy-mm-dd hh:mm:ss 日付と時刻の混在した値 タイムスタンプ 4

1970-01-01 00:00:00/2038

終了時刻は、最初の 2147483647 秒、日本標準時 2038-1-19 11:14:07 日本時間2038年1月19日午前03時14分07秒

YYYYMMDD HHMMSS 日付と時刻の値が混在、タイムスタンプ

3. 文字列の種類

文字列型とは、CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SETを指します。このセクションでは、これらの型の動作とクエリでの使用方法について説明します。

<テーブル タイプ サイズ 使用 CHAR 0〜255バイト 固定長文字列 VARCHAR 0-65535バイト 可変長文字列 TINYBLOB 0〜255バイト 255文字以下のバイナリ文字列 TINYTEXT 0〜255バイト 短いテキスト文字列 BLOB 0-65 535バイト バイナリ形式の長いテキストデータ テキスト 0-65 535バイト 長いテキストデータ メディアムブロック 0~16 777 215 バイト バイナリ形式の中長テキストデータ MEDIUMTEXT 0~16 777 215 バイト 中長テキストデータ LONGBLOB 0-4 294 967 295 バイト バイナリ形式の極めて大きなテキストデータ LONGTEXT 0-4 294 967 295 バイト 非常に大きなテキストデータ

CHAR型とVARCHAR型は似ていますが、保存と取り出しの方法が異なります。また、最大長や末尾の空白を保存するかどうかの点でも異なります。保存や取り出しの際に大文字と小文字の変換は行われません。

BINARYとVARBINARYはCHARとVARCHARに似ていますが、非バイナリ文字列の代わりにバイナリ文字列を含むという点が異なります。つまり、文字列の代わりにバイト文字列を格納します。つまり、文字セットを持たず、列の値であるバイトに基づいて数値のソートと比較を行います。

BLOBは、可変量のデータを保持できるバイナリラージオブジェクトである。BLOBには4つのタイプがある。TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOBの4種類があり、それぞれ保持できるストレージの範囲が異なる。

TEXTは4種類あります。TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXTの4つのBLOBタイプに対応し、状況に応じて格納できる最大長が異なる。


VII. よく使われる機能

取得元:https://www.cnblogs.com/noway-neway/p/5211401.html
シェアありがとうございます〜。

mysqlの組み込み関数のリストは mysql公式ドキュメント ここでは、使用する可能性のある関数の一部を簡単に紹介します。

1. 数学的機能

abs(x)
pi()
mod(x,y): 余り
sqrt(x): 開平平方根
ceil(x)またはceiling(x)
rand(),rand(N): 0から1までの浮動小数点数を返す、異なるシードNを使用して異なる乱数を得る
round(x, D): 小数点以下 D 位を保持するように丸める、D のデフォルトは 0、負も可能、例: round(19, -1) は 20 を返す
truncate(x, D): 小数点以下を切り捨て、Dは負の値も可能、例えば trancate(19,-1) は10を返す
sign(x): xの符号を返す、正と負のゼロはそれぞれ1、-1、0を返す
pow(x,y) または power(x,y)
exp(x): e^x
log(x): 自然対数
log10(x): 10進数の対数
radians(x):ラジアン角度を表す。
degrees(x):radians for angles
sin(x)とasin(x)です。
cos(x)とacos(x)です。
tan(x)とatan(x)です。
cot(x)です。

2. 文字列関数

char_length(str):strに含まれる文字数を返す。マルチバイト文字は1文字と数える。
length(str): 文字列の長さをバイト単位で返す。例えばutf8では、漢字は3バイト、数字と文字は1バイトとなる
concat(s1, s1, ...) : 連結パラメータで生成された文字列を返します。
concat_ws(x, s1, s2, ...) : 他のパラメータで生成された文字列をコンカテネータxで連結する.
INSERT(str,pos,len,newstr): posから始まるstrを返し、長さlenの部分文字列はnewstrに置き換わる。
1. posがstrの範囲にない場合、元の文字列strが返される
2. posから始まるstrの部分文字列がlenより小さい場合、posからの残りの文字をnewstrに置き換えます。
3. posを計算するときに1から始めて、pos=3なら3文字目から置換する。
lower(str)またはlcase(str)を使用します。
upper(str)またはucase(str)。
left(s,n): 文字列 s の左端 n 文字を返す。
right(s,n): 文字列の右端 n 文字を返す。
lpad(s1, len, s2): s2を用いてs1の左辺を長さlenまで埋め、s1の長さがlenより大きい場合、文字列s1を長さlenまで切り詰めて返す。
rpad(s1, len, s2):
ltrim(s): s の左側の空白文字を削除する。
rtrim(s)です。
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) または TRIM([remstr FROM] str): str から remstr を削除、 remstr のデフォルトは空白文字です。
REPEAT(str,count): strをcount回繰り返した新しい文字列を返す。
REPLACE(str,from_str,to_str): str の from_str を全て to_str で置き換える。
SPACE(N): 長さNの空白文字列を返します。
STRCMP(str1,str2): str1とstr2が同じなら0を、str1がstr2より小さいなら-1を、そうでないなら1を返す。
SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len),MID(str,pos,len): 特定の位置と特定の長さの部分文字列を取得する
LOCATE(substr,str), LOCATE(substr,str,pos),INSTR(str,substr),POSITION(substr IN str)。文字列中の特定の部分文字列の位置を返します。ここでINSTRは、他の関数の引数の位置と逆であることに注意してください。
REVERSE(str)
ELT(N,str1,str2,str3,...) : strNを返します.Nがstrパラメータの数より大きい場合はNULLを返します.
FIELD(str,str1,str2,str3,...) : 以下のstrリストのうち、strが最初に現れるものを返す、またはstrが見つからないかstrがNULLの場合は0を返す。
FIND_IN_SET(str,strlist) : strlistは','で区切られた文字列、strがstrlistに含まれないかstrlistが空の場合は0を返す、パラメータのいずれかがNULLの場合は、NULLを返す
MAKE_SET(bits,str1,str2,...) : ビットマップとしてのbits'によってstrN個のパラメータを選択し、選択したパラメータを','で連結して返します。

3. 日付・時刻機能

CURDATE()、CURRENT_DATE、CURRENT_DATE():現在の日付を 'YYYY-MM-DD' のフォーマットで取得する; もし +0 ならば YYYYMMDD を返す
UTC_DATE、UTC_DATE():現在の世界標準時を返します。
CURTIME([fsp])、CURRENT_TIME、CURRENT_TIME([fsp])。現在の時刻を 'HH:MM:SS' のフォーマットで取得 if +0 then return HHMMSS
UTC_TIME, UTC_TIME([fsp])
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP([fsp]), LOCALTIME, LOCALTIME([fsp]), SYSDATE([fsp]), NOW([fsp]): 現在の時刻と日付を 'YYYY-MM-DD HH:MM:SS ' 形式で取得、もし +0 なら YYYYMMDDHHMMSS と返します。
UTC_TIMESTAMP, UTC_TIMESTAMP([fsp])
UNIX_TIMESTAMP()、UNIX_TIMESTAMP(date): unix タイムスタンプ ('1970-01-01 00:00:00' UTC から date または date から秒単位 ) を返すが、これは実際には文字列から整数への変換である。
FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format): タイムスタンプから 'YYYY-MM-DD HH:MM:SS' または YYYYMMDDHHMMSS を返し、フォーマットを追加して希望フォーマットに従って表示します。希望する書式に基づいて表示する。
月(日付)
MONTHNAME(日付)
DAYNAME(日付)
DAY(日付), DAYOFMONTH(日付): 1-31 または 0
DAYOFWEEK(date): 1-7 ==> 日曜日-土曜日
DAYOFYEAR(日付): 1 - 365 (366)
WEEK(date[,mode]): その年の何週目かを決定する。もし1-1が新しい年の4日以上ある週なら、最初の週となり、そうでなければ前年の最終週となる。modeは、何曜日から始まるかを人工的に定義するために使われる。
WEEKOFYEAR(date): week(date,3) と同様、月曜日から一週間を数えます。
QUARTER(date):1~4を返します。
HOUR(time):時間内の時間数を返す、24より大きくすることができる
MINUTE(time)。
SECOND(時間)。
EXTRACT(unit FROM date):日付時刻の要素を抽出する。

SELECT EXTRACT(YEAR FROM '2009-07-02'); ##2009
SELECT EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03'); ##200907
SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 01:02:03');##20102
SELECT EXTRACT(MICROSECOND FROM '2003-01-02 10:30:00.000123');##123


TIME_TO_SEC(時刻)
SEC_TO_TIME(秒)

TO_DAYS(日付): 0年からの日数
TO_SECNDS(expr): 0年からの秒数

ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days),DATE_ADD(date,INTERVAL expr unit)
DATE_SUB(日付,INTERVAL expr unit), DATE_SUB(日付,INTERVAL expr unit)
ADDTIME(expr1,expr2)
SUBTIME(expr1,expr2)

SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');##'2008-01-02 01:01:01.000001'
SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');## '03:00:01.999997'


注:時刻と日付は +/- で直接加算・減算することもできます。

date + INTERVAL expr unit
date - INTERVAL expr unit
SELECT '2008-12-31 23:59:59' + INTERVAL 1 SECOND;## '2009-01-01 00:00:00'
SELECT INTERVAL 1 DAY + '2008-12-31';##'2009-01-01'
SELECT '2005-01-01' - INTERVAL 1 SECOND;## '2004-12-31 23:59:59' 


DATE_FORMAT(date,format)です。
DATEDIFF(expr1,expr2): 差の日数を返す。
TIMEDIFF(expr1,expr2): 時間間隔を返す。

4. 条件判断関数

IF(expr1,expr2,expr3): もしexpr1が0またはNULLでなければexpr2の値を返し、そうでなければexpr3の値を返します。
IFNULL(expr1,expr2): もしexpr1がNULLでなければexpr1を返し、そうでなければexpr2を返します。
NULLIF(expr1,expr2): もしexpr1=expr2ならNULLを返し、そうでなければexpr2を返します。
CASE値 WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...]。[ELSE result] END
compare_value=value のときに結果を返す。
CASE WHEN [条件] THEN result [WHEN [条件] THEN result ...]である。[ELSE result] END
条件がTRUEの場合、結果を返す

SELECT CASE 1 WHEN 1 THEN 'one'
WHEN 2 THEN 'two' ELSE 'more' END;## 'one'
SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;## 'true'
SELECT CASE BINARY 'B'
WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;## NULL


5. システム情報機能

VERSION():mysqlサーバーのバージョンをutf8エンコードした文字列で返します。
CONNECTION_ID():接続番号(接続のスレッド番号)を表示します。
DATABASE()、SCHEMA():現在使用しているデータベースを表示します。
SESSION_USER(), SYSTEM_USER(), USER(), CURRENT_USER, CURRENT_USER(): 現在のユーザ名 @ ホストを utf8 でエンコードした文字列で返す。
CHARSET(str)
COLLATION(str)
LAST_INSERT_ID():最後の挿入または更新クエリを自動的に返し、auto_incrementカラムに最初に出現した値を設定します。

6. 暗号化・圧縮機能

PASSWORD(str)です。この関数の出力は、変数 old_password に関連しています。
mysql 5.6 では old_password のデフォルトは 0 です。
password(str) は old_password=1 のとき old_password(str) と同じ効果を持ちますが、これは安全性に欠けるため (5.6.5 から) 非推奨とされています。
old_password=2 の場合、ハッシュ化されたパスワードは生成時にランダムに塩漬けされます。

MD5(str)。MD5 128ビットチェックサムを計算し、32桁の16進文字列を返す。strがNULLの場合はNULLを返す。
SHA1(str), SHA(str): 160ビットのチェックサムを計算し、40ビットの16進文字列を返す、strがNULLのときはNULLを返す。
SHA2(str, hash_length): SHA-2系列(SHA-224, SHA-256, SHA-384, SHA-512)のハッシュ法を計算する。第1パラメータに検査する文字列、第2パラメータに結果のビット数(224, 256, 384, 512)を指定する。
ENCRYPT(str[,salt]): unix crypt()を使用してstrを暗号化します。saltは最低2文字必要で、それ以外の場合はNULLを返します。

ECODE(crypt_str,pass_str): crypt_strを復号化し、pass_strをパスワードとして使用する。
ENCODE(str,pass_str): pass_strをパスワードとしてstrを暗号化する。

DES_ENCRYPT(str[,{key_num|key_str}]): str を Triple-DES アルゴリズムでエンコードします。この関数は mysql が ssl をサポートするように設定されている場合のみ利用可能です。
DES_DECRYPT(crypt_str[,key_str])

AES_ENCRYPT(str,key_str[,init_vector])です。
AES_DECRYPT(crypt_str,key_str[,init_vector])。

COMPRESS(string_to_compress): バイナリコードを返す
UNCOMPRESS(文字列_to_uncompress)

7. 集計機能

group byを使用せずに集約関数を使用した場合、すべての行をグループ化して処理することと同じになります。特に断りのない限り、集約関数は一般にNULLを無視します。
AVG([DISTINCT] expr): expr の平均値を返す。distinct オプションは、重複する値を無視するために使用される。
COUNT([DISTINCT] expr): select 内の expr の非ゼロ値の数を返す、戻り値は bigint 型
group_concat: グループ内の非NULL値を連結し、非NULL値がない場合はNULLを返す。

GROUP_CONCAT([DISTINCT] expr [,expr ...])

  • [ ORDER BY {unsigned_integer | col_name | expr}.
  • [ASC|DESC ] [,col_name・・・]です。
  • MAX([DISTINCT] expr)
    MIN([DISTINCT] expr)

    SUM([DISTINCT]エクスプローラー)
    VAR_POP(エクスプローラー)
    VARIANCE(expr): VAR_POP(expr) と同じですが,これは標準SQL関数を拡張したものです。
    VAR_SAMP(エクスプローラー)
    STD(expr)です。これは標準SQL関数を拡張したものです
    STDDEV(expr): この関数は、Oracleとの互換性のために設定されています。
    STDDEV_POP(expr)。これはSQL標準関数です。

    STDDEV_SAMP(expr): 標本標準偏差

    8. 形式・型変換関数

    FORMAT(X,D[,locale]): 数値 X を '#,####,#### に変換する。##Dは小数点以下の桁数です。
    CONV(N,from_base,to_base): 数Nの2進数を変更し、その2進数の数値からなる文字列を戻り値とする
    INET_ATON(expr):文字列を数値に変換する。
    INET_NTOA(expr): 数値から IP 文字列への変換
    CAST(expr AS type):データ型の変換
    CONVERT(expr,type), CONVERT(expr USING transcoding_name): type は BINARY[(N)], CHAR[(N)], DATE, DATETIME, DECIMAL[(M[,D])], DECIMAL[(M[,D])) が使用可能です。utf8などのTRANSCRIPTING_NAMES。