十一、MySQl中常用函数

---------------------------------------------------------       小路原创           ------------------------------------------------

一、字符串操作函数

十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 
 
example1:
合并字符串
select 
      concat('我是','一只小小小小鸟,','怎么飞呀飞飞呀飞怎么也飞不高') 连接字符串,
      concat('我是一个null',null) 连接null,
      concat('当前时间:',curdate()),
      concat_ws('-','0789','7698765'),
     concat_ws(null,'0789','7845678'),
     concat_ws('-','0789',null,'7689756')
;
结果:
我是一只小小小小鸟,怎么飞呀飞飞呀飞怎么也飞不高
当前时间:2013-06-12
0789-7698765
NULL
0789-7689756

结论:
1、如果连接字符串中有null则返回null。
2、concat_ws()以分隔符连接字符串,如果分隔符是null,则结果是null。
3、concat_ws()的第一个参数不是null,其他参数有null的,null将被忽略。

example2:
比较字符串
select 
strcmp('abcd','abce'),
strcmp('ab','ab'),
strcmp('abc','abb'),
strcmp('abc','abbd'),
strcmp('abc','ABC')
;

结果:-1  0  1  1  0
 
结论:
strcmp(str1,str2)
1、如果str1大于str2返回1
2、如果str1等于str2返回0
3、如果str1小于str2返回-1
4、比较str1和str2大小是从左往右比找到第一个不同的字符进行比较,从a-z越到后面越大,且大写字母跟小写字母对应相等。

example3:
获取字符串长度和字符数
select 
'SQL' 英文字符串,
length('SQL') 字符串“SQL”的长度,
char_length('SQL') 字符串“SQL”的字符数,
'数据库' 中文字符串,
length('数据库') 字符串“数据库”的长度,
char_length('数据库') 字符串“数据库”的字符数
;

结果: SQL 3  3  数据库 9  3  

结论:
1、在UTF-8中一个中文字符占3个字节。在GBK字符集中,一个汉字占两个字节。

example4:
字符串中字母大小写相互转化

select 
'mySQL5.6' 字符串,
upper('mySQL5.6') 使用upper转化,
ucase('mySQL5.6') 使用ucase转化,
lower('mySQL 5.6') 使用lower转化,
lcase('mySQL 5.6') 使用lcase转化
;

结果:mySQL5.6  MYSQL5.6  MYSQL5.6  mysql 5.6  mysql 5.6

结论:upper(str)和ucase(str)没有区别,lower(str)和lcase(str)没有区别。

example5:
查找字符串
FIND_IN_SET(str,strlist)
FIELD(str,str1,str2,str3,...)
LOCATE(substr,str)
POSITION(substr IN str)
INSTR(str,substr)
ELT(N,str1,str2,str3,...)

select 
FIND_IN_SET('mySQL','oracle,xxx,aql,database,mySQL,MYSQL'),
FIELD('mySQL','MySql','MYsql','MySQL','mySQL'),
LOCATE('my','oraMyclehasamysqlatabase'),
POSITION('my' IN 'MyConputerhasamysqlatabase'),
INSTR('MYconputerMySQL','mY'),
ELT(2,'my','MySQL','DATABSE','datebase')
;
结果: 5  1  4  1  1  MySQL

结论:
1、FIND_IN_SET(str,strlist)函数返回str在字符串集合strlist(以逗号隔开)中第一个匹配的位置,从1开始且不区分大小写。
2、FIELD(str,str1,str2……)函数返回str在后面的字符串串中第一个匹配的位置,从1开始且不区分大小写。
3、LOCATE(substr,str)、INSTR(str,substr)、 INSTR(str,substr)三个函数都是返回子字符串在父字符串中的起始位置,从1开始,不区分大小写。
4、注意INSTR(str,substr)函数父字符串在前面,子字符串在后面。
5、ELT(N,str1,str2,str3,...)函数返回str1,str2……中的第N个字符串,从1开始。
         
example6:
选择字符串
MAKE_SET(bits,str1,str2,...)

 select 
      bin(6) 6的二进制形式,
MAKE_SET(6,'甲骨文','公司','MySQL','数据库'),
bin(7) 7的二进制形式,
MAKE_SET(7,'甲骨文','公司','数据库','MySQL')
;

结果:110  公司,MySQL  111  甲骨文,公司,数据库

结论:
MAKE_SET(bits,str1,str2,...)函数会先将bits转换为二进制,然后从右往左逐个读,取字符串是从str1开始取,遇到1就取对应位置的字符串,
遇到0就跳过对应位置的字符串。组合起来的多个字符串以逗号隔开。


exmaple7:
截取字符串
LEFT(str,len)
RIGHT(str,len)
SUBSTR(str FROM pos FOR len)
MID(str,pos,len)

select 
     'MySQL database' 待截取的字符串,
     LEFT('MySQL database',5),
     RIGHT('MySQL database',8),
     SUBSTR('MySQL database',1,5),
     mid('MySQL database',1,5);

结果:MySQL database MySQL datebase MySQL  MySQL 

结论:
1、LEFT(str,len)从左边第一个字符开始截取len长的字符串,RIGHT(str,len)从右边第一个字符开始截取len长的字符串。
2、SUBSTR(str FROM pos FOR len)和MID(str,pos,len)的用法和效果一样。
3、注意字符串左边第一个位置坐标是1不是0。


example8:
去掉字符串中的空格

LTRIM(str)
RTRIM(str)
TRIM([remstr )

select 
     concat('---',LTRIM('  字符串   '),'---'),
     concat('---',RTRIM('  字符串   '),'---'),
     concat('---',TRIM('  字符串   '),'---');
结果
---字符串   ---    ---   字符串---    ---字符型---

example9:
替换字符串内容
INSERT(str,pos,len,newstr)
REPLACE(str,from_str,to_str)

select 
     insert('Oracle公司的数据库',1,6,'甲骨文'),
     insert('Oracle公司的数据库',20,50,'甲骨文'),
     insert('Oracle公司的数据库',20,5,'甲骨文'),
     insert('Oracle公司的数据库',1,20,'甲骨文'),
     insert('Oracle公司的数据库',null,5,'甲骨文'),
     replace('Oracle公司的数据库,Oracle公司的java','oracle','甲骨文'),
     replace('Oracle公司的数据库,Oracle公司的java','Oracle','甲骨文')
;

结果:
甲骨文公司的数据库    Oracle公司的数据库    Oracle公司的数据库    甲骨文    null  Oracle公司的数据库,Oracle公司的java  甲骨文公司的数据库,甲骨文公司的java

结论:
1、INSERT(str,pos,len,newstr)函数将返回将字符串str中从pos位置开始长度为len的字符串替换为newstr后的字符串。
如果参数pos的值超过字符串长度,则返回值为原始字符串str。
如果参数len的值大于原来字符串str剩下的长度,则将从pos开始全部替换为newstr。
如果任何一个参数为null,则返回null。
2、REPLACE(str,from_str,to_str)函数将字符串str中所有str_from替换为to_str,且区分大小写。

example10:
字符串填充
LPAD(str,len,padstr)
RPAD(str,len,padstr)
REPEAT(str,count)

select 
     LPAD('公司',5,'甲骨文'),
     LPAD('公司',4,'甲骨文'),
     LPAD('公司',7,'甲骨文'),
     RPAD('甲骨文',5,'公司'),
     RPAD('甲骨文',4,'公司'),
     RPAD('甲骨文',7,'公司'),
     REPEAT('Oracle',2)
;

结果:甲骨文公司   甲骨公司  甲骨文甲骨公司  甲骨文公司 甲骨文公  甲骨文公司公司  OracleOracle
结论:
1、LPAD(str,len,padstr)是拿字符串padstr从str的左边开始填充,直到总长度为len。
如果len小于str和padstr的总长度,则不断地重复填充。
如果Len小于等于str和padstr的总长度,则填充到len长度。
2、RPAD(str,len,padstr)是拿字符串padstr从str的右边开始填充,直到总长度为len。
如果len小于str和padstr的总长度,则不断地重复填充。
如果Len小于等于str和padstr的总长度,则填充到len长度。
3、REPEAT(str,count)返回将str字符串重复count次后的字符串。


二、数值操作函数
ABS(X)
CEIL(X)
FLOOR(X)
MOD(N,M)
RAND()
ROUND(X)
ROUND(X,D)
TRUNCATE(X,D)
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 
example:

select 
     ABS(-12.3),
     CEIL(3.141516),
     FLOOR(3.141516),
     MOD(11,2),
     RAND(),
     ROUND(3.141516),
     ROUND(3.141516,3),
     ROUND(3.141516,7),
     TRUNCATE(3.141516,4),
     TRUNCATE(3.141516,7)
;

结果:12.3  4  3  1   0.23083788736801397  3  3.142  3.141516  3.1415  3.141516


三、日期时间函数
CURDATE()
CURTIME()
NOW()
UNIX_TIMESTAMP()
FROM_UNIXTIME(unix_timestamp)
FROM_UNIXTIME(unix_timestamp,format)
WEEK(date[,mode])
YEAR(date)
HOUR(time)
MINUTE(time)
MONTH(date)
MONTHNAME(date)
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 
example1:

select 
     CURDATE(),
     CURRENT_DATE(),
     CURTIME(),
     CURRENT_TIME(),
     NOW(),
     CURRENT_TIMESTAMP(),
     LOCALTIME(),
     SYSDATE(),
     UNIX_TIMESTAMP()
;
结果:
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 
example2:
以unix方式显示日期和时间

select 
     NOW() 普通格式,
     UNIX_TIMESTAMP(NOW()) unix方式,
     FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())) 普通方式
;
结果;
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 
example3:
以utc方式显示日期和时间

select 
     NOW() 当前日期和时间,
     UTC_DATE() UTC日期,
     UTC_TIME() UTC时间
;
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 
example4:
获取日期和时间各部分的值和获取指定字段的值

select 
NOW() 当前日期和时间,
YEAR(NOW()) 年,
QUARTER(Now()) 季度,
MONTH(NOW()) 月,
MONTHNAME(NOW()) 月的名称,
WEEKDAY(NOW()) 周,
WEEKOFYEAR(NOW()) 一年中的第几周,
DAYNAME(NOW()) 星期,
WEEKDAY(NOW()) 工作日,
DAYOFMONTH(NOW()) 天,
DAYOFWEEK(NOW()) 一周的第几天,
DAYOFYEAR(NOW()) 一年中的第几天,
HOUR(NOW()) 小时,
MINUTE(NOW()) 分钟,
SECOND(NOW()) 秒,
EXTRACT(year from now()) 年,
EXTRACT(month from now())月,
EXTRACT(day from now()) 日,
EXTRACT(hour from now()) 小时,
EXTRACT(minute from now()) 分钟,
EXTRACT(second from now()) 秒
;
结果:
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 
example5;
计算日期和时间的函数
TO_DAYS(date)
FROM_DAYS(N)
DATEDIFF(expr1,expr2)
select 
now() 当前日期和时间,
to_days(now()) 相隔天数,
from_days(to_days(now())) 从默认时间经过一段时间的日期和时间,
datediff(now(),'2013-11-11') 相隔天数
;
结果:2013-06-12 22:31:13   735396  2013-06-12  -152
结论:
1、TO_DAYS(date)函数计算日期参数date与默认日期0000年1月1日之间相隔天数
2、FROM_DAYS(N)函数计算从默认日期0000年1月1日开始经历number天后的日期和时间
3、DATEDIFF(expr1,expr2)函数比较两个时间相隔天数,用前一个减去后一个

ADDDATE(date,INTERVAL   unit)
SUBDATE(date,INTERVAL expr unit)

adddate(d,interval expr type)
aubdate(d,interval expr type)
d--日期参数
expr--决定了时间的长度
type--决定了所操作的对象
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 
addtime(time,n)参数time增加n秒后的时间
subtime(time,n)参数time减小n秒后的时间


select 
      curdate() 当前日期,
      adddate(curdate(),5) 5天后的日期,
      subdate(curdate(),5) 5天前的日期,
      adddate(curdate(),interval '3,3' year_month) 3年3个月后的日期,
      subdate(curdate(),interval '1' year) 1年前的日期,
      addtime(curtime(),5) 5秒后的时间,
      subtime(curtime(),5) 5秒前的时间
;
结果:
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 

四、使用系统信息的函数
version():返回数据库的版本号
database():返回当前数据库名
user():返回当前用户
last_insert_id():返回最近生成的auto_increment值

example1:

select 
      version() 版本号,
      database() 当前数据库名,
      user() 用户
;

其他函数:
                                                  ---流程函数---
if(value,t,f):如果value1为真返回t,否则返回f

ifnull(value1,value2):如果value1不为空则返回value1,否则返回value2

case when [value1] then [result1]……
else [default]
end :如果value1为真返回result1,否则返回default

case [expr] when [value1] then [result1]……
else [default]
end : 如果expr等于value1返回result1,否则返回default

                                  ---实现特殊功能的函数-----
password(str):将字符串str加密

format(x,n):将数字x进行格式化,保留n位小数

inet_aton(ip):将ip地址转换成数字

inet_ntoa(x):将数字转换成ip地址

get_lock(name,time):创建一个持续时间为time名为name的锁

release_lock(name):为name锁解锁

benchmark(count,expr):实现将表达式expr重复执行count次

convert(s USING cs):实现将字符串s的字符集变成cs

convert(x,type):实现将x变成type类型

select
      if(1,2,3),
      ifnull(1,2),
      case when 1 then 'true' else 'false' end,
      case 'true' when 'true' then '真' else '假' end,
;
结果:
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 
select 
      password('cjdx'),
      format(3.1415,3),
      inet_aton('192.168.2.22'),
      inet_ntoa(3232236054)
;
结果:
十一、MySQl中常用函数 - 水到绝境是飞瀑 - 谁的青春不迷茫
 


---------------------------------------------------------       小路原创           ------------------------------------------------
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值