<dd id="Article"> <p><strong>新建:</strong></p> <p>Create function function_name(参数列表)returns返回值类型</p> <p>函数体</p> <p>函数名,应该合法的标识符,并且不应该与已有的关键字冲突。</p> <p>一个函数应该属于某个<a class="keylink" href="http://www.2cto.com/database/" target="_blank">数据库</a>,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库。</p> <p>参数部分,由参数名和参数类型组成。</p> <p>返回值类类型</p> <p>函数体由多条可用的<a class="keylink" href="http://www.2cto.com/database/MySQL/" target="_blank">mysql</a>语句,流程控制,变量声明等语句构成。</p> <p>多条语句应该使用begin end语句块包含。</p> <p>注意,一定要有return返回值语句。</p> <p><strong>删除:</strong></p> <p>Dropfunction if existsfunction_name;</p> <p><strong>查看:</strong></p> <p>Show function status like ‘partten’</p> <p>Show create functionfunction_name;</p> <p><strong>修改:</strong></p> <p>Alter functionfunction_name函数选项。</p> <p>例子:</p> <p>Hello world!</p> <p><strong>IF</strong><strong>语句</strong></p> <p>IF <em>search_condition</em>THEN</p> <p><em>statement_list</em></p> <p>[ELSEIF <em>search_condition</em>THEN<em>statement_list</em>]</p> <p>...</p> <p>[ELSE <em>statement_list</em>]ENDIF;</p> <p><strong>CASE</strong><strong>语句</strong></p> <p>CASE <em>case_value</em></p> <p>WHEN <em>when_value</em>THEN<em>statement_list</em></p> <p>[WHEN <em>when_value</em> THEN<em>statement_list</em>]</p> <p>...</p> <p>[ELSE <em>statement_list</em>]</p> <p>END CASE; </p> <p><strong>循环:</strong></p> <p><strong>While</strong></p> <p>[<em>begin_label</em>:]WHILE<em>search_condition</em>DO</p> <p><em>statement_list</em></p> <p>END WHILE [<em>end_label</em>];</p> <p>如果需要在循环内提前终止 while循环,则需要使用标签;标签需要成对出现。</p> <p><strong>退出循环</strong></p> <p>退出整个循环leave 相当于break</p> <p>退出当前循环iterate 相当于 continue</p> <p>通过退出的标签决定退出哪个循环。</p> <strong>变量声明:</strong><br>语法:<br>DECLARE var_name[,...] type [DEFAULT value]<br>这个语句被用来声明局部变量。要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。<br>使用<br>语序使用 set 和 select into语句为变量赋值。<br><br>注意在函数内是可以使用全局变量(用户自定义的变量的)@XXX 全局变量不用声明 可以直接@XXX使用。 <blockquote> <p>例子:获取当前班级内,最大的学号。 </p>
</blockquote> <blockquote> <p>参考学生表 </p> <p>create table join_student( </p> <p>stu_id int not null auto_increment, </p> <p>stu_no char(10), </p> <p>class_id int not null, </p> <p>stu_name varchar(10), </p> <p>stu_info text, </p> <p>primary key (stu_id) </p> <p>); </p> <p>计算新增学号 </p> <p>drop function if existssno;</p> <p> delimiter $$ #在包含有语句块时 可以更换语句结束符“;” 为“$$” </p> <p>create function sno(c_id int)returns char(10) </p> <p>begin </p> <p>declare last_no char(10); #声明一个局部变量 用来保存当前最大的学号, 如果没有就为null</p> <p>declare class_name char(10); </p> <p>select stu_no from join_student where class_id=c_id order by stu_no desc limit 1 into last_no; </p> <p>if last_no is null then #如果为空代表当前班级没有学生 从1开始,获得班级名字 </p> <p>return concat ((select c_name from join_class where id=c_id into class_name),'001'); #concat() 函数的作用是连接字符串。 </p> <p>else </p> <p>return concat(left(last_no,7),lpad(right(last_no,3) + 1, 3, '0')); </p> <p>end if;</p> <p> #return @last_no; </p> <p>end </p> <p>$$</p> <p>delimiter ; </p> <p>随机获得学生名字。 </p> <p>drop function if exists sname; </p> <p>delimiter $$ </p> <p>create function sname() returns char(2) </p> <p>begin </p> <p>declare first_name char(16) default '赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨'; </p> <p>declare last_name char(10) default '甲乙丙丁戊己庚辛壬癸'; </p> <p>declare full_name char(2); </p> <p>set full_name=concat(substring(first_name,floor(rand()*16+1), 1), substring(last_name,floor(rand()*10+1), 1)); </p> <p>return full_name; </p> <p>end </p> <p>$$ </p> <p>delimiter ;</p>
</blockquote> <p>========================================================================================</p> <p><strong>mysql常用内置函数</strong></p> <p>数值函数</p> <p>Abs(X),绝对值abs(-10.9) = 10</p> <p>Format(X,D),格式化千分位数值format(1234567.456, 2) =1,234,567.46</p> <p>Ceil(X),向上取整ceil(10.1) = 11</p> <p>Floor(X),向下取整floor (10.1) = 10</p> <p>Round(X),四舍五入去整</p> <p>Mod(M,N) M%N M MOD N 求余 10%3=1</p> <p>Pi(),获得圆周率</p> <p>Pow(M,N) M^N</p> <p>Sqrt(X),算术平方根</p> <p>Rand(),随机数</p> <p>TRUNCATE(X,D) 截取D位小数</p> <p>时间日期函数</p> <p>Now(),current_timestamp(); 当前日期时间</p> <p>Current_date();当前日期</p> <p>current_time();当前时间</p> <p>Date(‘yyyy-mm-dd HH;ii:ss’);获取日期部分</p> <p>Time(‘yyyy-mm-dd HH;ii:ss’);获取时间部分</p> <p>Date_format(‘yyyy-mm-dd HH;ii:ss’,’%D %y %a %d %m %b %j');</p> <p>Unix_timestamp();获得unix时间戳</p> <p>From_unixtime();//从时间戳获得时间</p> <p>字符串函数</p> <p>LENGTH(string ) //string长度,字节</p> <p>CHAR_LENGTH(string) //string的字符个数</p> <p>SUBSTRING(str ,position [,length ]) //从str的position开始,取length个字符</p> <p>REPLACE(str ,search_str ,replace_str) //在str中用replace_str替换search_str</p> <p>INSTR(string ,substring ) //返回substring首次在string中出现的位置</p> <p>CONCAT(string [,... ]) //连接字串</p> <p>CHARSET(str) //返回字串字符集</p> <p>LCASE(string ) //转换成小写</p> <p>LEFT(string ,length ) //从string2中的左边起取length个字符</p> <p>LOAD_FILE(file_name) //从文件读取内容</p> <p>LOCATE(substring , string [,start_position ]) //同INSTR,但可指定开始位置</p> <p>LPAD(string ,length ,pad ) //重复用pad加在string开头,直到字串长度为length</p> <p>LTRIM(string ) //去除前端空格</p> <p>REPEAT(string ,count ) //重复count次</p> <p>RPAD(string ,length ,pad) //在str后用pad补充,直到长度为length</p> <p>RTRIM(string ) //去除后端空格</p> <p>STRCMP(string1 ,string2 ) //逐字符比较两字串大小</p> <p>流程函数:</p> <p>CASE WHEN [condition]THEN result[WHEN [condition]THEN result ...][ELSE result]END 多分支</p> <p>IF(expr1,expr2,expr3) 双分支。</p> <p>聚合函数</p> <p>Count()</p> <p>Sum();</p> <p>Max();</p> <p>Min();</p> <p>Avg();</p> <p>Group_concat()</p> <p>其他常用函数</p> <p>Md5();</p> <p>Default();</p>
</dd>