一、数据库函数的概念
函数能对查询结果进行一定的操作,包括系统函数、字符串函数、日期时间函数、标量函数、聚合函数等。
这里的函数均是使用mysql函数,与sql server函数可能不一样。
函数返回的结果集需要查询才能显示。
select user();
二、系统函数
系统函数是对mysql服务器和数据库对象进行操作,返回服务器配置和数据库对象数值等信息。
函数名称 | 函数功能 |
---|
user( ) | 返回用户名 |
database( ) | 返回当前会话的数据库名称 |
version( ) | 返回数据库的版本号 |
charset(str) | 返回字符串str的字符集 |
| |
| |
三、日期和时间函数
函数名称 | 函数功能 |
---|
dayofweek(date) | 返回日期date的星期索引,(0=星期一,1=星期二, ……6= 星期天) |
dayofmonth(date) | 返回date的月份中的日期,范围1到12 |
dayofyear(date) | 返回date在一年中的日数,在1到366范围内 |
month(date) | 返回date的月份,范围1到12 |
dayname(date) | 返回date的星期名字。 |
monthname(date) | 返回date的月份名字。 |
quarter(date) | 返回date一年中的季度,范围1到4。 |
week(date,first) | 返回date的周数。first参数是指一周的第一天是星期几。 |
year(date) | 返回date的年份 |
hour(time) | 返回time的小时 |
minute(time) | 返回time的分钟 |
second(time) | 返回time的秒数 |
current_date() | 以‘YYYY-MM-DD’或YYYYMMDD格式返回今天日期值 |
current_time() | 以‘HH:MM:SS’或HHMMSS格式返回当前时间值 |
now() | 以‘YYYY-MM-DD HH:MM:SS’或YYYYMMDDHHMMSS格式返回当前的日期和时间 |
| |
四、数学函数
函数名称 | 函数功能 |
---|
abs(x) | 返回x的绝对值 |
mod(x,y) | 返回x被y除的余数 |
rand() | 返回0 到 1 内的随机值 |
round(x) | 返回x的四舍五入的一个整数 |
ceil(x) | 返回大于 x 的最小整数值 ,上取整 |
floor(x) | 返回小于 x 的最大整数值,下取整 |
truncate(x,y) | 返回数字 x 截断为 y 位小数的结果,只保留整数 |
format(x,n) | 将数字x进行格式化,将x保留到小数点后n位 |
| |
五、字符串函数
函数名称 | 函数功能 |
---|
concat(str1,str2,…) | 返回一个str1,str2,…连接起来的字符串 |
lengrh(str) | 返回字符串str的长度 |
locate(substr,str) | 返回子串substr在字符串str第一个出现的位置 |
left(str,x) | 返回字符串str的最左面x个字符 |
right(str,x) | 返回字符串str的最右面x个字符 |
substring(str,x,y) | 从字符串str的起始位置x开始(包括x)返回一个y长度的字符串 |
trim(str) | 去掉字符串行尾和行头的空格 |
Ltrim(str) | 去掉字符串 str 左侧的空格 |
Rtrim(str) | 去掉字符串 str 行尾的空格 |
replace(str,a,b) | 返回字符串str,其字符串a的所有出现由字符串b代替 |
repeat(str,count) | 返回由重复count次的字符串str组成的一个字符串 |
reverse(str) | 返回颠倒字符顺序的字符串str |
insert(str,x,y,instr) | 将字符串 str 从第 x 位置开始(包括x),y 个字符长的子串替换为字符串 instr |
lower(str) | 将字符串 str 中所有字符变为小写 |
upper(str) | 将字符串 str 中所有字符变为大写 |
Lpad(str,n,pad) | 用字符串 pad 对 str 最左边进行填充,直到长度为 n 个字符长度 |
Rpad(str,n,pad | 用字符串 pad 对 str 最右边进行填充,直到长度为 n 个字符长度 |
| |
- locate():如果substr不是在str里面,返回0
- repeat():如果count <= 0,返回一个空字符串。如果str或count是NULL,返回NULL。
六、控制流程函数
函数名称 | 函数功能 |
---|
if(value, Tstr,Fstr) | 如果 value 是真,返回Tstr;否则返回Fstr |
case when [value1] then [result1] else [result0] end | 如果 value1 是真,返回 result1,否则返回 result0 |
case [expr] when [value1] then [result1] when [value2] then [result2] else [result0] end | 如果 expr 等于 value1,返回 result1,如果 expr 等于 value2,返回 result2,否则返回 default |
ifnull(value1,value2) | 如果 value1 不为空返回 value1,否则返回 value2 |
strcmp(str1,str2) | 如果str1>str2返回1,str1=str2反回0,str1<str2返回-1 |
| |
- strcmp():当str为字符串时,比较的是字符数量。当str为数字类型时,比较的是数字大小。
七、加密函数
函数名称 | 函数功能 |
---|
password(str) | 返回字符串 str 的加密版本 |
md5(str) | 返回字符串 str 的 MD5 值 |
encode(str,pwd_str) | 使用字符串pswd_str来加密字符串str |
decode(crypt,pwd_str) | 使用字符串pswd_str来为crypt_str解密。 |
| |
- 数据库用户中的密码必须使用password函数加密。
- encode()/decode:加密的结果是一个二进制数,必须使用BLOB类型的字段来保存
八、聚合函数
函数名称 | 函数功能 |
---|
sum(column) | 将column列的值求和,只能对数字类型使用 |
avg(column) | 将column列的值求平均值,只能对数字类型使用 |
max(column) | 将column列的值求最大值,只能对数字类型使用 |
min(column) | 将column列的值求最小值,只能对数字类型使用 |
count(column) | 统计表中column中有多少条记录,括号里为(*)时为统计表中所有记录 |
group by | 创建多个字段的汇总值,但是必须和聚合函数同时使用 |
| |
- count()不能和distinct一起使用来消除重复值
- group by 聚合函数值能求出单个字段的汇总值,如果对相应字段或表达式使用group by,能够把表中的记录分组分类,并对组中的数据汇总
- group by 不能对数据类型为text、image、bit的字段使用
SELECT Ssex,count(*) as 人数 FROM student.student group by Ssex;
九、其他函数
函数名称 | 函数功能 |
---|
benchmark(count,expt) | 将表达式expr重复执行count次,然后返回执行时间,用来判断MySQL处理表达式的速度 |
convert(str using charset) | 将字符串str的字符集变成charset所写的类型 |
bin(x) | 返回x的二进制编码 |
oct(x) | 返回x的八进制编码 |
hex(x) | 返回x的十六进制编码 |
| |
| |