MYSQL函数

发布时间 2024-01-05 16:33:30作者: 小寒、

MYSQL中的函数包括:数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等其他函数。

 一、数学函数

  主要的数学函数有:绝对值函数、三角函数(包含正弦函数、余弦函数、正切函数、余切函数等)、对数函数、随机数函数等。在有错误产生时,数学函数将返回空值NULL

1、绝对值函数 ABS()

  abx(x) 返回x的绝对值(正数的绝对值是其本身,负数的绝对值是其相反数)

2、返回圆周率的函数 PI()

  pi() 返回圆周率π的值。默认的显示小数位是6位(3.141593 四舍五入)

3、平方根函数 SQRT()

  sqrt(x)返回非负数的二次平方根,负数没有平方根返回NULL

4、求余函数 MOD()

  mod(x,y) 返回x被y整除后的余数,mod()对于带小数的部分数值也会有作用,它返回除法运算后的精确余数
5、获取整数的函数 CEIL()、CEILING()和FLOOR()

  ceil(x)和ceiling(x)意义相同,返回不小于x的最小整数值(注意其中包含负数)

  floor(x)返回不大于x的最大整数值(注意其中包含负数)

6、获取随机数的函数RAND()和RAND(x)

  rand(x) 返回随机的浮点数v,范围在0到1之间。若指定一个整数参数x,则它被用作种子值,用来产生重复序列。

  不带参数的rand()每次产生的随机数是不同的。rand(x)中x的参数相同时,将产生相同的随机数,不同的x产生的随机数不同

7、四舍五入函数ROUND(x)、ROUND(x,y)和TRUNCATE(x,y)

  round(x)返回最接近x的整数,对x的值进行四舍五入。

  round(x,y)返回最接近x的数,其值保留到小数点后面y位,对小数位值进行四舍五入。若y为负值则将保留x值到小数点左边y位,保留的小数点左边位数直接保存为0,不进行四舍五入。

  truncate(x,y) 返回被舍去至小数点后y位的数字x。若y为0,则结果不带有小数点或不带有小数部分。若y为负数,则截取(归零)x小数点左起y位开始后面所有低位的值。

  

8、符号函数SIGN(x)

  sign(x) 返回参数的符号(即判断这个数是正数、负数或为零),x的值为负、零或正时返回结果依次为-1、0、1。

  

 

9、幂运算函数POW(x,y)、POWER(x,y)和EXP(x)

  pow(x,y)或者power(x,y)返回x的y次乘方的结果值。当y为负数时返回x的y此乘方结果值的倒数。

  exp(x) 返回e(自然常数约为2.718281828459045)的x乘方后的结果值。

10、对数运算函数LOG(x)和LOG10(x)

  log(x) 返回x的自然对数,x相对于基数e的对数。其中对数定义域不能为负数,因此log(-x)返回结果为NULL

  log10(x) 返回x的基数为10的对数。其中对数定义域不能为负数,因此log(-x)返回结果为NULL

11、角度与弧度相互转换的函数RADIANS(x)和DEGREES(x)

  radians(x)将参数x由角度转为弧度。

  degrees(x)将参数x由弧度转为角度。

12、正弦函数SIN(x)和反弦函数ASIN(x)

  sin(x)返回x正弦,其中x为弧度。

  asin(x)返回x的反正弦,即正弦为x的值。若x不在-1到1范围内,则返回NULL。

  sin(x)和asin(x)互为反函数。

13、余弦函数COS(x)和反余弦函数ACOS(x)

  cos(x)返回x的余弦,其中x为弧度。

  acos(x)返回x的反余弦,即余弦为x的值。若x不在-1到1范围内,则返回NULL。

  cos(x)和acos(x)互为反函数。

14、正切函数、反正切函数和余切函数TAN(x)、ATAN(x)和COT(x)

  tan(x) 返回x的正切,其中x为给定的弧度值。

  atan(x) 返回x的反正切,即正切为x的值。

  cot(x) 返回x的余切。

  tan(x)和atan(x) 互为反函数,cot(x)和tan(x)互为倒函数。

二、字符串函数

  MYSQL中字符串函数有:计算字符串长度函数、字符串合并函数、字符串替换函数、字符串比较函数、查找指定字符串位置函数等。

15、计算字符串字符数的函数和字符串长度的函数CHAR_LENGTH(str)、LENGTH(str)

  char_length(str) 返回字符串所包含的字符个数。一个多字节字符算作一个单字符

  length(str) 返回值为字符串的字节长度,使用utf8编码字符集,一个汉字算作3个字节,一个数字或字母算作一个字节。

  

16、合并字符串函数CONCAT(s1,s2,...)、CONCAT_WS(x,s1,s1,...)

  concat() 返回结果为连接参数产生的字符串,支持一个或多个参数。若任何一个参数为NULL,则返回结果为NULL。如果所有参数为非二进制字符串,则结果为非二进制字符串。如果参数中包含有二进制字符串,则结果为一个二进制字符串。

  concat_ws() 是concat()的特殊形式。第一个参数是其它参数的分隔符,分隔符可以是一个字符串,也可以是其它参数。如果分隔符为NULL则结果也为NULL,函数会忽略任何分隔符参数后的NULL值

   

17、替换字符串函数 INSERT(s1,x,len,s2)

  insert(s1,x,len,s2) 将s1字符串从x位开始的len为长度字符串替换为s2。如果x超过字符串长度,则返回原字符串。假如len的长度大于其他字符串长度,则从x开始替换。若任何一个参数为NULL,则结果为NULL。

  

18、字母大小写转换函数 LOWER(str)、LCASE(str)、UPPER(str)、UCASE(str)

  lower(str)、lcase(str)  将字符串str全部转换为小写字符串

  upper(str)、ucase(str) 将字符串str全部转换为大写字符串

19、获取指定长度的字符串函数 LEFT(s,n)、 RIGHT(s,n)

  left(s,n) 返回字符串s开始最左边n个字符

  right(s,n) 返回字符串s开始最右边的n个字符

20、填充字符串函数 LPAD(s1,len,s2)、RPAD(s1,len,s2)

  lpad(s1,len,s2) 返回字符串s1,其左边由字符串s2填补到len字符长度。假如s1的长度大于len,则返回s1被截取至len长度的字符串

  prad(s1,len,s2) 返回字符串s1,其右边由字符串s2填补到len字符长度。假如s1的长度大于len,则返回s1被截取至len长度的字符串

  

 

21、删除空格的函数 LTRIM(str)、RTRIM(str)、TRIM(str)

  ltrim(str) 删除字符串str最左侧的空格

  rtrim(str) 删除字符串str最右侧的空格

  trim() 删除字符串str所有的空格

22、删除指定字符串函数 TRIM(s FROM str)

  trim(s from str) 删除字符串str两端所有的子字符串s,中间不删除,s为可选项,在未指定情况下,删除空格

  

 

23、重复生成字符串函数 REPEAT(s,n)

  repeat(str,n) 返回一个由str字符串n次重复组成的字符串。若n<=0,则返回空字符串。若str或n为NULL,则返回NULL

   

 

24、空格函数 SPACE(n)

  space(n) 返回一个由n个空格组成的字符串。

25、字符串替换函数 REPLACE(str,s1,s2)

  replace(str,s1,s2) 使用字符串s2替换字符串str中所有的字符串s1

  

 

26、比较字符串大小的函数 STRCMP(str1,str2)

  strcmp(str1,str2) 比较字符串str1和str2的大小。若所有字符串均相同,则返回0;str1小于str2,则返回-1,其他情况返回1

  

 

27、获取子串的函数 SUBSTRING(str,n,len)和 MID(str,n,len)

  substring(str,n,len) 完整参数形式情况下,从字符串str起始位置n返回一个长度同len字符相同的str的子字符串。n可以为负值,则起始位置位于字符串str的倒数n个字符

  mid(str,n,len) 与 substring(str,n,len)作用相同

  注:如果对len使用的是一个小于1的值,则结果始终为空字符串

 

28、查找子串开始位置的函数 LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1)

  locate(str1,str)

  position(str1 in str)

  instr(str,str1)

  三个函数作用相同,返回字符串str1在字符串str的开始位置

29、字符串逆序函数 REVERSE(str)

  reverse(str) 将字符串str顺序进行反转

30、返回指定位置字符串的函数 ELT(n,字符串1,字符串2,字符串3,...,字符串n)

  elt(n,str1,str2,...,strn) 若n为1,则返回str1。n为2,返回str2,以此类推。若n小于1或大于参数的数目,则返回NULL

  

 

31、返回指定字符串位置的函数 FIELD(str,str1,str2,...)

  field(str,str1,str2,...) 返回字符串str在字符串列表str1,str2,... 中第一次出现的位置,找不到str或str为NULL,则返回0

  

 

 

32、返回子串位置的函数 FIND_IN_SET(str1,str)

 

  find_in_set(str1,str) 返回字符串str1在字符串列表str中出现的位置,字符串列表是由一个或多个逗号分开的字符串组成的列表。若没找到则为0。若任一参数为NULL,则返回值为NULL。第一个参数包含逗号则次函数无法正常运行

 

   

 

33、选取字符串的函数 MAKE_SET(x,str1,str2,...)

  make_set(x,str1,str2,...) 返回由x的二进制数指定的相应的字符串组成的字符串,str1对应比特1,s2对应比特01,以此类推。str1,str2,...中的NULL值不会被添加到结果中

三、日期和时间函数

34、获取当前日期的函数和获取当前时间的函数 CURDATE()、CURRENT_DATE()、CURTIME()、CURRENT_TIME()

  curdate()和current_date() 函数作用相同,返回当前日期按照"YY-MM-DD"或"YYMMDD"格式返回,具体格式根据函数用在字符串或数字语境而定。

  

 

  curtime()和current_time() 函数作用相同,将当前时间按照"HH:MM:SS"或"HHMMSS"格式返回,具体格式根据函数用在字符串或数字语境而定

  

 

35、获取当前日期和时间函数 CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYADATE()

  current_timestamp()、localtime()、now()、syadate() 函数作用相同,均返回当前日期和时间值,格式为"YY-MM-DD HH:MM:SS" 或"YYMMDDHHMMSS",具体格式根据函数用在字符串或数字语境而定

  

 

36、UNIX时间戳函数 UNIX_TIMESTAMP(date)、FROM_TIMESTAMP(date)

  unix_timestamp(date) 若无参数调用,则返回一个unix时间戳(1970-01-01 00:00:00之后的秒数)作为无符号整数。date可以是一个DATE字符串、DATETIME字符串、TIMESTAMP或一个当地时间的YYMMDD或YYYYMMDD格式的数字

  from_unixtime(date) 函数把unix时间戳转换为普通格式的时间,与unix_timestamp()互为反函数

  

 

37、返回UTC日期的函数和返回UTC时间的函数 UTC_DATE()、UTC_TIME()

  utc_date() 返回当前UTC(世界标准时间)日期值,其格式为"YYYY-MM-DD"或"YYYYMMDD",具体格式根据函数用在字符串或数字语境而定

  utc_time() 返回当前UTC(世界标准时间)时间值,其格式为"HH-MM-SS"或"HHMMSS",具体格式根据函数用在字符串或数字语境而定

  

 

38、获取月份的函数 MONTH(date)、MONTHNAME(date)

  month(date) 函数返回date对应的月份,范围值0-12

  monthname(date) 函数返回date对应月份的英文全名

  

 

39、获取星期的函数 DAYNAME(date)、DAYOFWEEK(date)、WEEKDAY(date)

  dayname(date) 函数返回date对应工作日的英文名称。

  dayofweek(date) 函数返回date对应的一周中的索引。1表示周日,2表示周一...,7表示周六

  weekday(date) 函数返回date对应的工作日索引 0表示周一,1表示周二...,6表示周日

  

 

40、获取星期数的函数 WEEK(date)、WEEKOFYEAR(date)

  week(date) 计算日期date是一年中的第几周。week()的双参数形式允许指定该星期是否起始于周日回周一,以及返回值的范围是否从0-53或从1-53。若第二参数被省略,则使用default_week_format()系统自变量的值。参考下表:

  

  weekofyear(date) 计算某天位于一年内的第几周,范围是从1-53。相当于week(date,3)

  

 

41、获取天数的函数 DAYOFYEAR(date)、DATOFMONTH(date)

  dayofyear(date) 函数返回date是一年中的第几天,范围1-366

  dayofmonth(date) 函数返回date是一月中的第几天,范围是1-31

  

 

42、获取年度、季度、小时、分钟和秒钟的函数 YEAR(date) QUARTER(date) MINUTE(time) SECOND(time)

  year(date) 返回date对应的年份,范围1970-2069

  quarter(date) 返回date对应一年的季度值,范围1-4

  minute(time) 返回time对应的分钟数,范围是从0-59

  second(time) 返回time对应的秒钟,范围是从0-59

  

 

43、获取日期的指定值的函数 EXTRACT(type from date)

  extract(type from date) 函数所使用的时间间隔类型说明符同DATE_ADD()或DATE_SUB()的相同,但它从日期中提取一部分,而不是按执行日期运算

  

 

44、时间和秒钟转换的函数 TIME_TO_SEC(time)、SEC_TO_TIME(seconds)

  time_to_sec(time) 返回已转换秒的time参数。转换公式:小时*3600+分钟*60+秒

  sec_to_time(seconds) 返回被转换为小时、分钟和秒数的seconds参数值,其格式为"HH:MM:SS"或"HHMMSS",具体格式根据函数用在字符串或数字语境而定

  

 

45、计算日期和时间的函数

  计算日期和时间的函数有:DATE_ADD() ADDDATE() DATE_SUB() SUBDATE() ADDTIME() SUBTIME()和DATE_DIFF()

  date_add(date,INTERVAL expr type) 和 date_sub(date,INTERVAL expr type) 其中,date是一个DATETIME或DATE值,用来指定起始时间。expr是一个表达式,用来指定从起始日期添加或减去的时间间隔值。expr是一个字符串;对于负值的时间间隔,它可以以一个负号开头。type为关键词,它指示表达式被解释的方式。type和expr关系如下表。若date参数是一个DATE值,计算只会包括YEAR、MONTH和DAY的部分(即没有时间部分),其结果是一个DATE值。否则结果为DATETIME值

  

 

 

  1.1、date_add(date,INTERVAL expr type)、adddate(date,INTERVAL expr type) 两个函数作用相同,执行日期的加法运算

  

 

  1.2、date_sub(date,INTERVAL expr type)、subdate(date,INTERVAL expr type) 两个函数作用相同,执行日期的减法运算  

  

 

  1.3、addtime(date,expr) 函数将expr值添加到date,并返回修改后的值,date是一个日期或者日期时间表达式,而expr是一个时间表达式

  

 

  1.4、subtime(date,expr) 函数中date减去expr值,并返回修改后的值,date是一个日期或者日期时间表达式,而expr是一个时间表达式

  

 

  1.5、datediff(date1,date2) 返货起始时间date1和结束时间date2之间的天数(date1-date2)。date1和date2为日期或date-and-time表达式。计算只会用到这些值得日期部分

  

 

46、将日期和时间格式转换的函数 DATE_FORMAT(date,format)、TIME_FROMAT(time,format)、GET_FORMAT(val_type,format_type)

  date_format(date,format) 根据format指定的格式显示date值。主要format格式如下表:

  

 

 

      

 

  time_format(time,format) 只处理时间值,根据format字符串安排time值得格式。format字符串可能仅会处理包含小时、分钟和秒的格式说明符,其他说明符产生一个NULL或者0。若time值包含一个大于23的小时部分,则%H和%k小时格式符会产生一个大于0.23的通常指范围

  

  get_format(val_type,format_type) 返回日期时间字符串的显示格式,val_type表示日期数据类型,包括DATE DATETIME和TIME;format_type表示格式化显示类型,包括EUR INTERVAL ISO JIS USA。get_format根据两个值类型组合返回的字符串格式如下表:

  

 

 

  

 

五、条件判断函数

  条件判断函数也称控制流程函数,根据满足的条件的不同,执行相应的流程

47、IF(expr,v1,v2) 函数

  if(expr,v1,v2) 如果表达式expr的结果是TRUE,则IF函数的返回值为v1,否则返回值为v2。IF函数的返回值为数字值或字符串值。具体情况视所在语境而定。

       

  注:如果v1或v2中只有一个明确是NULL,则IF函数的结果类型为非NULL表达式的结果类型

 

48、IFNULL(v1,v2) 函数

  ifnull(v1,v2)  假如v1不为NULL,则该函数返回值为v1,否则返回v2。 IFNULL函数的返回值为数字值或字符串值。具体情况视所在语境而定。

  

49、CASE 函数

  语法1:CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END

  该函数表示,如果expr表达式的结果等于某个vn,则返回对应位置THEN后面的结果。如果与所有值都不相等,则返回ELSE后面的rn。

 

  

  语法2: CASE WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END

  该函数表示,某个vn的值为TRUE,执行对应位置THEN后面的结果。如果与所有值都不相等,则返回ELSE后面的rn。

   

 

六、系统信息函数

  MySQL中的系统信息有:数据库的版本号、当前用户名和连接数、系统字符集、最后一个自动生成的ID等。

50、获取MySQL版本号、连接数和数据库名的函数

  version()  返回指示MySQL服务器版本的字符串。这个字符串使用uft8字符集

  connection_id() 返回MySQL服务器当前的连接次数。每个连接都有各自唯一的ID

  show processlist 该命令的输出结果显示了那些线程在运行(只列出前100条),不仅可以查看当前连接数,还可以查看当前的连接状态,帮助识别有问题的查询语句等。root账号能看到所有连接,普通账号只能看到自己占用的连接。

  show full processlist 全部列出

  database() 和 schema() 返回使用utf8字符集的默认(当前)数据库名

51、获取用户名的函数

  user()、current_user()、system_user()、session_user() 这几个函数返回当前被MySQL服务器验证的用户名和主机名组合。这个值符合确定当前登录用户存取权限的MySQL账户。一般情况下这个值返回结果相同

52、获取字符串的字符集和排序方式的函数

  charset(str)  返回字符串str自变量的字符集

  collation(str)  返回字符串str的字符排列方式

53、获取最后一个自动生成的ID值的函数

  last_insert_id() 返回最后一个INSERT或UPDATE为AUTO_INCREMENT列自动生成的值。

 

七、加密函数

  加密函数主要用来对数据进行加密和界面处理,以保证某些重要数据不被别人获取。这些函数在保证数据库安全时非常有用。

54、加密函数 PASSWORD(str)

  password(str)  从原明文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL。

  注:password()函数在mysql服务器的鉴定系统中使用,不应该用在个人应用程序中。password()加密是单向的(不可逆)。

55、加密函数 MD5(str)

  md5(str)  为字符串算出一个MD5 128比特校验和。该值已32位十六进制数字的二进制字符串形式返回,当参数为NULL时,返回NULL。

56、加密函数 ENCODE(str,pswd_str)

  encode(str,pswd_str)  使用pswd_str作为密码来加密str。使用decode()解密结果,结果是一个和strc=长度相同的二进制字符串

57、解密函数 DECODE(crypt_str,pswd_str)

  decode(crypt_str,pswd_str)  使用pswd_str作为密码,解密加密字符串crypt_str,crypt_str是由encode()返回的字符串。

 

八、其他函数

58、格式化函数 FORMAT(x,n)

  format(x,n)  将数字x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串形式返回。若n为0,则返回结果不含小数部分。

59、不用进制的数字进行转换的函数

  conv(N,from_base,to_base)  该函数进行不同进制数间的转换。返回值为数值N的字符串表示,由from_base进制转换为to_base进制。如有任意一个参数为NULL,则返回值为NULL。自变量N被理解为一个整数,但可以被指定为一个整数或字符串。最小基数为2,最大基数则为36.

  

60、IP地址与数字相互转换的函数

  inet_aton(expr)  给定一个字符串IP地址,返回代表该IP地址的数字网路地址,地址可以是4或8比特地址。

  inet_ntoa(expr)  给定一个数字网络地址(4或8比特),返回字符串IP地址。