mysql学习笔记(四) MySQL常用函数
字符串函数
- concat(s1,s2,s3…sn):连接S1,S2,S3..Sn 为一个字符串;
CREATE TABLE class ( dept INT(8) NOT NULL PRIMARY KEY,
deptname CHAR(32) );
INSERT INTO class (dept,deptname)VALUES (11,'cleaning'),(12,'grocery'),(10,'aloco'),(14,'snacking');
SELECT CONCAT(dept,'-',deptname) FROM class
WHERE dept = 12 ;
需要注意的是任何字符串与NULL串连,结果都将是NULL
如下实例:
INSERT INTO class (dept,deptname)VALUES (16,NULL);
SELECT CONCAT(dept,'-',deptname) FROM class
WHERE dept = 16 ;
执行结果如下:
- Insert(str,x,y,instr):将字符串 str 从第x个开始,y个字符长得子串替换为字符串instr
SELECT INSERT(deptname,2,5,'classssssssssss')FROM class
WHERE dept = 12 ;
执行结果如下:
如果字符串instr长度大于Y???
如上,都会插入。。。
- Lower(str): 将字符串str 中所有字符变为小写
INSERT INTO class VALUES (19,'HHHH');
SELECT LOWER(deptname) FROM class
WHERE dept=19 ;
如果str 是Null??
- upper(str): 将字符串str 中所有字符变为大写
SELECT UPPER(deptname) FROM class
WHERE dept=12 ;
- left(str,x):返回字符串str的最左边X个字符
SELECT LEFT(deptname,2) FROM class WHERE dept = 11 ;
- right(str,x):返回字符串str的最右边X个字符
SELECT RIGHT(deptname,3) FROM class WHERE dept = 12 ;
对于left和right函数如果第二个参数是NULL 则不返回任何字符串,
- elt(index,str1,str2,str3…):返回指定index位置的字符串
SELECT RIGHT(deptname,NULL) FROM class WHERE dept = 12 ;
那如果第一个参数是NULL呢??---结果是一样的-----------NULL
SELECT RIGHT(NULL,3) FROM class WHERE dept = 12 ;
- Lpad(str,n,pad):用字符串pad 对字符串str最左边进行填充,直到长度为n个字符长度。
- Rpad(str,n,pad):用字符串pad 对字符串str最右边进行填充,直到长度为n个字符长度。
SELECT LPAD(deptname,15,'sEnEdEr') FROM class WHERE dept = 10 ;
SELECT RPAD(deptname,15,'sEnEdEr') FROM class WHERE dept = 10 ;
对于Lpad和Rpad 函数如果字符串的长度n不能容纳完整的字符串pad,字符个数够了以后的pad后面的字符都会被截去
- Ltrim(str):去掉字符串左侧的空格
- Rtrim(str):去掉字符串行尾的空格
INSERT INTO class VALUES (22,' aaa ');
SELECT LTRIM(deptname) FROM class WHERE dept = 22;
SELECT RTRIM(deptname) FROM class WHERE dept = 22;
Repeat(str,x):返回字符串str 重复X次以后的结果
SELECT REPEAT(deptname,3) FROM class WHERE dept = 11;
Replace(str,a,b):用字符串b替换字符串str中所有出现的字符串a
SELECT REPLACE(deptname,'o','m') FROM class WHERE dept = 10;
Strcmp(s1,s2):比较字符串s1和s2—比较的是字符串ASCII码值的大小。
strcmp类似编程语言中的比较字符串函数(依据ascll码?),会从左到右逐个比较,直到有一个不等就返回结果,否则比较到结尾。
Trim(str):去掉字符串行尾和行头的空格
SELECT TRIM(deptname) FROM class WHERE dept = 22;
Substring(str,x,y):返回字符串str x位置起y个字符长度的字符串
length(str):用于获取字符串长度
获取字符串字符数函数:char_length(str)
字符串查找函数:
- find_in_set(str1,str2):返回字符串str1在str2中的位置,str2包含若干个以逗号分隔的字符串(可以把str2看出一个列表,元素是多个字符串,查找结果是str1在str2这个列表中的索引位置,从1开始)
- field(str,str1,str2,str3…):与find_in_set类似,但str2由一个类似列表的字符串变成了多个字符串,返回str在str1,str2,str3…中的位置。
- locate(str1,str2):返回子串str1在字符串str2中的位置
- position (str1 IN str2):返回子串str1在字符串str2中的位置
SELECT POSITION('o' IN deptname)FROM class;
- instr(str1,str2):返回子串str2在字符串str1中的位置【注意这里调转了】
数值函数:
Abs(x):返回X的绝对值
Cel(x):返回大于x的最小的整数值
Floor(x):返回小于x的最大整数值
Mod(x,y):返回x/y 的模;
Rand():返回0-1内的随机数
Round(x,y):返回参数x四舍五入的有Y位小数的值
Truncate(x,y):返回数字x阶段为Y未小数的结果
日期和时间函数
CurDate():返回当前日期---只包含年月日
CurTIME():返回当前时间—只包含时分秒
Now():返回当前的日期和时间
Unix_TIMESTAMP(date):返回日期date的UNIX时间戳
FROM_UNIXTIME:f 返回UNIX时间戳的日期值---与Unix_TIMESTAMP(date)互为逆操作
Week(date):返回日期date是一年中的第几周
Year(date):返回日期date的年份
Hour(time):返回当前时间的小时值
MINUTE(time):返回时间的分钟值
Monthname(date):返回date的月份的英文名
Date_FORMATE(date,fmt ):按字符串 fmt 格式化日期date的值,此函数能够按指定的格式显示日期,可用到的格式符如下:
Date_add(date,interval expr type):返回与所给日期date相差INTERVAL 时间段的日期
其中INTERVAL 是间隔类型关键字,exp是一个表达式,这个表达式对应后面的类型,type是间隔类型,mysql提供了13种间隔类型,如下:
Datediff(date1,date2):用来计算两个日期相差的天数
流程函数
If(value,t,f):如果value是真返回t,否则返回f
Ifnull(value1,value2):如果value1不为空,则返回value1,否则返回value2
此函数常用来替换null值,
Case [expr] when[value1] then [result1]…else[default]end :如果expr等于value1,则返回result1,否则返回default
这其中可以有多个when 例如:
Case salary when 1000 then ‘low’ when 2000 then ‘mid’ else ‘high’
其他常用函数
此处仅做一些列举,更多详见Mysql的官方手册
Database():返回当前的数据库名
Version()返回当前的数据库版本
User():返回当前登录的用户名
Inet_aton(IP):返回IP地址的数字表示
Inet_ntoa(num):返回数字表示的IP地址
Inet_aton(IP):和Inet_ntoa(num):的主要用途是将字符串的IP地址转换为数字表示的网络字节序,这样可以更方便的进行IP或者网段的比较
Password(str):返回字符串str的加密版本
MD5():返回字符串str的MD5值—加密
上一篇: mysql最简单增删改查