>MySQL函数

常用的函数有:

1. 字符串函数;主要用于处理字符串。

2. 数值函数;主要用于处理数字。

3. 日期和时间函数;主要用于处理日期和事件。

4. 系统信息函数;获取系统信息。

>>数学函数

获取随机数

rand()和rand(x)

  获取随机数。这两个函数都会返回0-1之间的随机数,其中rand()函数返回的数是完全随机的,而rand(x)函数返回的随机数值是完全相同的。

获取整数的函数

 

ceil(x)

  函数返回大于或等于数值x的最小整数。
floor(x)

  函数返回小于或等于数值x的最大整数。

截取数值函数

truncate(x,y)

  返回数值x,保留小数点后y位

  eg:truncate(903.343434,2),truncate(903.343,-1) => 903.34 | 900 |

四舍五入函数

round(x)   函数返回值x经过四舍五入操作后的数值。round(x,y)  返回数值x保留到小数点后y位的值。

未分类数值函数

ABS(x)   返回x的绝对值

BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制)

EXP(x)   返回值e(自然对数的底)的x次方

GREATEST(x1,x2,...,xn)返回集合中最大的值

LEAST(x1,x2,...,xn)      返回集合中最小的值

LN(x)                    返回x的自然对数

LOG(x,y)返回x的以y为底的对数

MOD(x,y)                 返回x/y的模(余数)

PI()返回pi的值(圆周率)

SIGN(x) 返回代表数字x的符号的值

SQRT(x) 返回一个数的平方根

ISNULL()  函数用于规定如何处理 NULL 值。Eg: IFNULL(UnitsOnOrder,0)

 

>>聚合函数(常用于GROUP BY从句的SELECT查询中)

AVG(col)返回指定列的平均值

COUNT(col)返回指定列中非NULL值的个数

MIN(col)返回指定列的最小值

MAX(col)返回指定列的最大值

SUM(col)返回指定列的所有值之和

GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果

GROUP_CONCAT(id) 默认分隔符是","

GROUP_CONCAT(distinct id ORDER BY id DESC SEPARATOR '_') 设置分隔符

Eg: 2_1 

GROUP_CONCAT(concat_ws(', ',id,journal) ORDER BY id DESC SEPARATOR '. ')

Eg: 2, Submitted (20-JUN-2002). 1, Unpublished

Eg: select id,group_concat(name separator ';') from aa group by id;

注:group_concat()需配合group by一起使用

>>字符串函数

合并字符串函数concat() 和 concat_ws():

在MySQL中可以通过函数concat()和concat_ws()将传入的参数连接成为一个字符串。

concat(s1, s2,...sn)

//该函数会将传入的参数连接起来返回合并的字符串类型的数据。如果其中一个参数为null,则返回值为null.

  示例:concat('my','s','ql')  => 'mysql'

concat_ws(sep,s1,s2,...sn)

//将s1,s2...,sn连接成字符串,并用sep字符间隔。

//分隔符可以是一个字符串,也可以是其他参数。如果分割符为null,则返回结果为null。函数会忽略任何分割符后的参数null

  eg:concat_ws('-','020','87658907') => '020-87658907'  concat_ws('-','020',null,'87658907') =>'020-87658907'

查找字符串位置:

mysql中提供了丰富的函数去查找字符串的位置。分别有find_in_set()函数、field()函数、locate()函数、position()函数和instr()函数。同时还提供了查找指定位置的字符串的函数elt()。

FIND_IN_SET(str,list) 

  分析逗号分隔的list列表,如果发现str,返回str在list中的位置

  eg:find_in_set('mysql','oracle,mysql,db2') => 2

LOCATE (str1 , str )、position(str1 in str) 和 instr(str,str1)

  返回参数str中字符串str1的开始位置  

  eg:locate('sql','mysql'),position('sql' in 'mysql'),instr('mysql','sql') => 3 | 3 | 3 |

elt(n,str1,str2...)

  返回指定位置的字符串

  eg:elt(1,'mysql','db2','oracle') => 'mysql' 

从现有字符串中截取子字符串:

截取子字符串的函数有:left(),right(),substring(),mid();

LEFT(str,x)

  返回字符串str中最左边的x个字符

RIGHT(str,x)

  返回字符串str中最右边的x个字符

  eg:left('mysql',2),right('mysql',3) => my | sql |

substring(str,num,len)  mid(str,num,len)  substr(string string,num start,num length)

  返回字符串str中的第num个位置开始长度为len的子字符串

  eg:substring('zhaojd',2,3),mid('zhaojd',2,4) => hao | haoj |

从字符串的第 4 个字符位置(倒数)开始取,直到结束
  substring('sqlstudy.com', -4) => .com

从字符串的第 4 个字符位置(倒数)开始取,只取 2 个字符
  substring('sqlstudy.com', -4, 2) => .c

注:在函数 substring(str,num, len)中, num可以是负值,但 len 不能取负值。

 substring_index(str,delim,count) 

substring_index('www.sqlstudy.com.cn', '.', 2)  截取第二个 '.' 之前的所有字符 => www.sqlstudy

substring_index('www.sqlstudy.com.cn', '.', -2)  截取第二个 '.' (倒数)之后的所有字符 => com.cn

substring_index('www.sqlstudy.com.cn', '.coc', 1)  如果在字符串中找不到 delim 参数指定的值,就返回整个字符串 => www.sqlstudy.com.cn

获取字符串长度函数length()和字符数函数char_length():

length(str)   返回字符串str中的字符数

char_length(str)

  eg:length('mysql'),length('汉字'),char_length('mysql'),char_length('汉字') => 5 | 4 | 5 | 4

  //字符串‘MySQL'共有5个字符,但是占6个字节空间。这是因为每个字符串都是以\0结束。两个函数都是获取字符串的字符数而不是所占空间大小。

比较字符串大小函数strcmp():

strcmp(str1,str2);

//如果参数str1大于str2,返回1;如果str1小于str2,则返回-1;如果str1等于str2,则返回0;

   eg:strcmp('abc','abd') => -1

字母的大小写转换upper()和lower():

字母大写转换函数:upper(s); ucase(s);
字母小写转换函数:lower(s); lcase(s);

去除字符串的首尾空格:

去除字符串首尾空格的函数有:ltrim()、rtrim()、trim() 

ltrim(str)

  返回去掉开始处空格的字符串

rtrim(str)

  返回去掉结束处空格的字符串。

trim(str)

  返回去掉首尾空格的字符串,可以过滤指定的字符串

完整格式:TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)

简化格式:TRIM([remstr FROM] str)

eg:

SELECT TRIM(' bar '); //默认删除前后空格

SELECT TRIM(LEADING  ','  FROM  ',,barxxx'); //删除指定首字符 如',‘

SELECT TRIM(BOTH  ','  FROM  ',,bar,,,'); //删除指定首尾字符

SELECT TRIM(TRAILING  ','  FROM  'barxxyz,,'); //删除指定尾字符 如',‘

替换字符串函数:

INSERT(str,x,y,instr)

  将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果

  如果参数pos的值超过字符串长度,则返回值为原始字符串str。
  如果len的长度大于原来str中所剩字符串的长度,则从位置pos开始进行全部替换。若任何一个参数为null,则返回值为null.

  eg:insert('这是mysql数据库系统',3,5,'oracle') => 这是oracle数据库系统

replace(str,substr,newstr)

  将字符串str中的子字符串substr用字符串newstr来替换。

  eg:replace('这是mysql数据库','mysql','db2') => 这是db2数据库

未分类字符串函数

QUOTE(str) 用反斜杠转义str中的单引号

REPEAT(str,srchstr,rplcstr)返回字符串str重复x次的结果

REVERSE(str) 返回颠倒字符串str的结果

ASCII(char)返回字符的ASCII码值

BIT_LENGTH(str)返回字符串的比特长度

 

>>日期和时间函数

获取当前日期和时间的函数

now(),current_timestamp(),localtime(),sysdate()

  四个函数不仅可以获取当前日期和时间,而且显示的格式也一样。推荐使用now()

  eg:now(),current_timestamp(),localtime(),sysdate() => 2016-08-25 16:09:20 | 2016-08-25 16:09:20 | 2016-08-25 16:09:20 | 2016-08-25 16:09:20 |

curdate(),current_date()

  获取当前日期

  eg:curdate(),current_date() => 2016-08-25 | 2016-08-25 |

curtime()、current_time()

  获取当前时间的函数,推荐使用curtime()

  eg:curtime(),current_time() => 16:15:04 | 16:15:04 |

获取日期和时间各部分值

year()函数返回日期中的年份

quarter()函数返回日期属于第几个季度

month()函数返回日期属于第几个月 monthname()函数返回了英文表示的月份

week()函数返回日期属于第几个星期  

dayofmonth()函数返回日期属于当前月的第几天  

hour()函数返回时间的小时

minute()函数返回时间的分钟

second()函数返回时间的秒。

 

DAYOFWEEK(date)   返回date所代表的一星期中的第几天(1~7)

DAYOFMONTH(date)  返回date是一个月的第几天(1~31)

DAYOFYEAR(date)   返回date是一年的第几天(1~366)

DAYNAME(date)   返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);

获取指定值的extract()

extract(type from date)
  上述函数会从日期和时间参数date中获取指定类型参数type的值。type的取值可以是:year,month,day,hour,minute和second

  eg:select now(),extract(year from now()) year,extract(month from now()) month,extract(day from now()) day,extract(hour from now()) hour,extract(mi

nute from now()) minute,extract(second from now()) second => 2016-08-25 16:43:45 | 2016 | 8 | 25 | 16 | 43 | 45 |

 计算日期和时间的函数

adddate(date,n)函数:该函数计算日期参数date加上n天后的日期。

subdate(date,n)函数:该函数计算日期参数date减去n天后的日期。

 DATE_ADD(date,INTERVAL int keyword)

  返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化)

subdate(d,interval expr type):返回日期参数d减去一段时间后的日期,表达式expr决定了时间的长度。参数type决定了所操作的对象。

addtime(time,n):计算时间参数time加上n秒后的时间。

subtime(time,n):计算时间参数time减去n秒后的时间。

  eg:curdate(),adddate(curdate(),5),subdate(curdate(),5)  => 2016-08-25 | 2016-08-30 | 2016-08-20 |

  curdate(),adddate(curdate(),interval '2,3' year_month),subdate(curdate(),interval '2,3' year_month) => 2016-08-25 | 2018-11-25 | 2014-05-25 |

 其他未分类函数

DATE_FORMAT(date,fmt)  依照指定的fmt格式格式化日期date值

 

mysql随机数整数 mysql随机整数函数_函数返回

 

DATEDIFF(date1,date2)  函数返回两个日期之间的天数。

Eg: SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate   结果:1

SELECT DATEDIFF('2008-12-29','2008-12-30') AS DiffDate   结果:-1

DATE_SUB(date,INTERVAL int keyword)返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECTDATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);

 

mysql随机数整数 mysql随机整数函数_函数返回_02

FROM_UNIXTIME(ts,fmt)  根据指定的fmt格式,格式化UNIX时间戳ts

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
  • YEAR - 格式 YYYY 或 YY

 

 

LAST_DAY(date)日期或日期时间值,并返回对应的值,为每月的最后一天。返回NULL,如果该参数是无效的。

Eg:LAST_DAY('2003-02-05') 结果: 2003-02-28

 

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval 参数给出。该参数必须是以下值的其中一个:

  1. FRAC_SECOND。表示间隔是毫秒
  2. SECOND。秒
  3. MINUTE。分钟
  4. HOUR。小时
  5. DAY。天
  6. WEEK。星期
  7. MONTH。月
  8. QUARTER。季度
  9. YEAR。年

 

 

 

一些示例:

获取当前系统时间:

返回两个日期值之间的差值(月数):SELECT PERIOD_DIFF(200302,199802);

在Mysql中计算年龄:

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)),'%Y')+0 AS age FROM employee;

这样,如果Brithday是未来的年月日的话,计算结果为0。

下面的SQL语句计算员工的绝对年龄,即当Birthday是未来的日期时,将得到负值。

SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') -(DATE_FORMAT(NOW(), '00-%m-%d') <DATE_FORMAT(birthday, '00-%m-%d')) AS age from employee

 

>>类型转换

转换函数CAST与CONVERT

CAST(value as type) 

CONVERT(value, type) 

  用来获取一个类型的值,并产生另一个类型的值

注:可以转换的数据类型是有限制的。这个类型可以是以下值其中的一个:

二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED

Date  -->  String

DATE_FORMAT(date,format) 

   format样式整理:

        年:  %Y  显示四位 : 2015            %y    只显示后两位  :15

        月:  %M 月份的英文显示:October %m  月份的阿拉伯显示:01-12  %b 月份的英文缩略显示:Oct  %c  月份的阿拉伯显示:1-12

        日:  %d 阿拉伯显示:00-31        %D 带有英文后缀:1st-31th     %e 阿拉伯显示:1-31          %j   年的天:001-366   

        时:  %H :00-23           %h:01-12        %I:01-12      %k:0-23      %l:1-12

        分:   %i:00-59

        秒:   %S:00-59        %s:00-59

        微妙: %f

        AM/PM:%p

        12小时制时间:%r:   02:02:44 PM

        24小时制时间: %T:  14:02:44

         周: %W:周的英文显示      %w 周的阿拉伯显示 :0(星期日)-6(星期六)  %a   周的英文缩略显示:Mon-

    eg:DATE_FORMAT(now(),"%Y-%m-%d %T")   2015-09-01 17:10:52

         DATE_FORMAT(now(),"%Y-%m-%d %H:%i:%s %p")     2015-09-01 17:10:52 PM

>>String -->Date

STR_TO_DATE(str,format)      str:字符形式的日期       format:格式化样式

分隔符一致,年月日要一致

  eg:   STR_TO_DATE('1992-04-12',"%Y-%m-%d")  str_to_date('2008-4-2 15:3:28','%Y-%m-%d %H:%i:%s');  输出:1992-04-12(日期形式)

 

>>系统信息函数

database()

  返回当前数据库名
BENCHMARK(count,expr) 将表达式expr重复运行count次
CONNECTION_ID() 返回当前客户的连接ID
FOUND_ROWS() 返回最后一个SELECT查询进行检索的总行数
user()或SYSTEM_USER()

   返回当前登陆用户名
version()

   返回MySQL服务器的版本