MySQL—语法总结(3) 函数、存储过程 (更新中)
# 信息函数 VERSION() 版本信息 CONNECTION_ID() 服务器的连接数 DATABASE()、SCHEMA 当前数据库名 LAST_INSERT_ID() 最后插入记录的 ID 号 USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()、CURRENT_USER 当前用户 # 加密函数 MD5 信息摘要算法 PASSWORD() 密码算法 # 日期时间函数 NOW() 当前日期时间 CURDATE() 当前日期 CURTIME() 当前时间 DATA_ADD() 日期变化(增或减) DATEDIFF() 日期差值 DATE_FORMAT() 日期格式化 # 字符函数 space(N) 返回由 N 个空格构成的字符串 length(str) 返回字符串的存储长度 charjength(str) 返回字符串的字符个数 lower(column|str) 将字符串全部转换为小写字母 upper(column|str) 将字符串全部转换为大写字母 repeat(str, count) 将字符串 str 重复 count 次后返回 reverse(str) 将字符串 str 反转后返回 concat(column|strl, column|str2...) 将多个字符串首尾相连后返回 concat_ws(sep,strl,str2...) 将多个字符串指定连接符sep的首尾相连后返回 left(str, len) ; right(str, len) 返回最左(右)边的 len长度的子串 substr(str,pos[,len]) 从字符串中的指定位置pos开始取一个字串返回 insert(str;substr) 从字符串 str 中返回子串 substr 第一次出现的位置 lpad(str,len,padstr) , rpad(str,len,padstr) 在 str 的左(右)边填充给定的字串 padstr 到指定的长度 len , 返回填充后的字符串 trim([{both|leading|trailing} [remstr]from] str 从源字符串 str 中去掉两端、前缀或后缀,字符 remstr, 并返回 replace(str, from_str, to_str 在字符串 str 中查找所有的子串 from_str, 用 to_str 替换返回 Itrim(str) , rtrim(str) 去掉字符串的左边或右边的空格(左对齐、右对齐) format(X, D [,丨oca丨e]) 以格式 "#,##,###.##" 格式化数字X strcmp(exprl,expr2) 如果两个字符串是一样的则返回 0 ; 如果第一个小于第二个则返回 -1 ; 否则返回 1 charCN,... [useing charset.name]) 将每个参数 N 解释为整数(字符的编码),返回对应的字符,构成的字符串 # 比较函数 [NOT] BETWEEN ... AND ... (不) 在...范围内 [NOT] IN() (不) 在列出值范围内 IS [NOT] NULL (非) 空 # 数值函数 ABS(x) 返回 x 的绝对值 CEIL(x) 返回大于 x 的最大整数值 FLOOR(x) 返回小于 x 的最大整数值 MOD(x,y) 返回 x / y 的模 RAND () 返回0 到 1 内的随机值 ROUND(x,y) 返回参数 x 的四舍五入的有 y 位小数的值,y 默认为0 TRUNCATE(x,y) 返回数字 x 截断为 y 位小数的结果,y 取复数表示从小数点左边截断 # 聚合函数 SUM() 返回某个列之和 AVG() 返回某列的平均值 MAX() 返回某列的最大值 MIN() 返回某列的最小值 COUNT() 返回某列的行数
# 自定义函数(user-defined function UDF) 创建UDF: DELIMITER ? # 如果函数体只有一条语句, begin和end可以省略, 同时DELIMITER也可以省略 CREATE FUNCTION func_name(param1 ...,param2...) RETURNS datetype BEGIN 函数体 RETURN ... END ? # DELIMITER的符号 DELIMITER ; 调用UDF: SELECT func_name(parameter_value,...) 删除UDF: DROP FUNCTION func_name
# 存储过程
DROP PROCEDURE p_name; # 删除存储过程 CALL p_name(); # 调用存储过程 # 批量创建表 DELIMITER // CREATE PROCEDURE CTABLES() BEGIN DECLARE i INT; DECLARE table_name VARCHAR(20); DECLARE table_ VARCHAR(20); DECLARE sql_text VARCHAR(2000); SET i=1; SET table_name=''; SET table_='fz'; SET sql_text=''; while i<25 do #IF i<10 THEN SET table_name=CONCAT(table_pre,i); #ELSE SET table_name=CONCAT(table_pre,i); #END IF; SET table_name=CONCAT(table_,i); SET sql_text=CONCAT('CREATE TABLE ', table_name,'(id int)'); SELECT sql_text; SET @sql_text=sql_text; PREPARE stmt FROM @sql_text; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET i=i+1; end while; END //