数学函数
abs :返回x的绝对自豪
ceil(x),ceilin(x):返回不小于x的最小整数
select ceil(30000.3);
floor:返回不大于x的最大整数值
select floor(3000.3);
```
rand(x): 返回0~1的随机数,x值相同时返回随机数相同
sign(x):返回参数作为-1,0或1的符号,该符号取决于x的值为负、零或正
pi:
**truncate(x,y)**:返回数值x保留到小数点后y位的值
````sql
select truncate(30000.34567,3);
```
round(x):返回离x最近的整数
```sql
select round(3000.3);
```
**round(x,y)**:返回数值x保留小数点后y位的值,但要四舍五入
```sql
select Round(3000.3456,4);
```
## 常用字符串函数
char_length(s)**:返回字符串s 的字符数
**length(s)**:返回字符串s 的长度,单位为字节
**concat(s1,s2)**:返回结果为连接参数产生的字符串
**left(s,n)**:从字符串s开始的前n个字符
**right(s,n)**:从字符串s开始,返回右边的n个字符
````sql
#将身份证号的中间几位进行加密
select insert(身份证号码,3,8,'******');
```
Trim(s)**:把字符串开始和结尾处的去掉
**subString(s,n,len)**:获取从字符串s中的第n个位置开始长度为len的字符串
**replace(s,s1,s2)**:用字符串s2替换s字符串s中的字符串s1
``sql
select姓名,身份证号 from 员工 where subString('身份证号码',3,1)=5;
```
**locate(s1,s)**:从字符串s获取s1的开始位置
```sql
select loginname,username,email from easybuy_user where instr(email,'@')=1 and instr(email,'@') is null and right(email,1)!='@';
insert(s1,x,len,s2):将字符串s2替换s1的位置x开始长度为len的字符串
upper 将字符串s的所有字母都编程大写字母
lower 将字符串s的所有字母都变成小写字母
日期时间函数
now():返回当前日期和时间
Month() : 返回日期d中的月份
year() 返回当前的年份
day() 返回当前的日期
dayname() 返回当前日期是星期几
week(d) 返回当前日期是本年的第几个星期
dayofmonth() 返回今天是本月中的第几天
quarter() 返回本月是本年的第几个季度
datediff(d1,d2) 计算日期之间相隔的天数
adddate(d,n) 计算起使日期加上n天的日期
adddate(a.interval expr type) 计算起使日期d加上一个时间段后的日期
subdate() 计算从起使日期d减去n天后的日期
timestampdiff(timetype,d1,d2) 计算时间相差的单位
加密函数
MD5加密
一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。主要增强算法复杂度和不可逆性。
- MD5 不可逆,但是具体的简单值的 md5 是一样的
- MD5 破解网站的原理,背后有一个字典对照
-- =========测试MD5 加密=======
CREATE TABLE `testmd5`(
`id` INT(4) NOT NULL,
`name` VARCHAR(20) NOT NULL,
`pwd` VARCHAR(50) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 明文密码
INSERT INTO testmd5 VALUES(1,'zhangsan','123456'),(2,'lisi','123456'),(3,'wangwu','123456');
-- 加密
UPDATE testmd5 SET pwd=MD5(pwd) WHERE id = 1;
UPDATE testmd5 SET pwd=MD5(pwd) -- 加密全部的密码;
-- 插入的时候加密
INSERT INTO testmd5 VALUES(4,'xiaoming',MD5('123456'));
-- 如何校验:将用户传递进来的密码,进行md5加密,然后比对加密后的值
SELECT * FROM testmd5 WHERE `name`='xiaoming' AND pwd=MD5('123456');
转换函数
format(x,y) 将数字进行格式化,将x保留到小数点后n位
ascii(s) 返回字符串s的第一个字符的ascii码
conv(x,f1,f2) 将x从f1进制数变成f2进制数
** inet_ation(ip)** 可以将IP地址转换成数字表示
inet_ntoa(n) 可以将数字n转换成ip的形式
cast 可以用来改变类型,用case和convent()函式
两个函式相同,但是不同的语法工构造
cast(expression as type)
convert
cast(expression type)
case()式依照ansii的规格,convent()是依照ODBC的规则,类型可以是binary,char,date,datetime,通常MySQL会帮你自动改变类型。
条件函数
if(expr,v1,v2) 如果表达式成立。则执行,否则执行其他
ifnull(expr,v1,v2)
如果条件1不为空,就显示条件1,否则显示条件2
case when expr then v1 [when expr2 then v2....][else wn] end:case表示函数开始,end表示函数结束
case expr when e1 then v1 [when e2 then v2....] [else wn] end:case表示函数开始,end表示函数结束
系统信息函数
version 获取数据库版本号
connection_id 获取服务器的连接号
database() 获取当前数据库名
user(),system_suer(),session_suer() 获取当前用户
** current_user()** 获取当前用户
** charset(str)** 获取字符串的str字符集
collation(str) 获取字符串str的字符排序方式
last_insert_id() 获取最近生成的zuto_increment值